Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];

Вниз

Ка узнать полный путь файла?   Найти похожие ветки 

 
bent   (2002-11-10 06:56) [0]

Ка узнать полный путь файла если имеется короткий? Есть такая функция GetFullPathName, дык чё-то не работает. Может быть есть какая-нибудь альтернатива этой функции? А межет быть я чё-то не так делаю?


 
MBo   (2002-11-10 07:22) [1]

> межет быть я чё-то не так делаю
Вероятно. Покажи, как делаешь


 
bent   (2002-11-10 07:27) [2]

GetFullPathName("pChar1", 123,"Короткое имя","pChar1");


 
MBo   (2002-11-10 07:33) [3]

Память выдели. Короткое имя - первый параметр


 
MBo   (2002-11-10 08:13) [4]

Что-то у меня GetFullPathName не расширило имя ;(((

Тогда можно так:
procedure TForm1.Button1Click(Sender: TObject);
var SR:TSearchRec;
begin
if FindFirst("C:\Windows\bluela~1.bmp",faAnyFile,SR)=0 then
Caption:=SR.FindData.cFileName;
end;


 
Василий2   (2002-11-10 08:15) [5]

Зайди в FAR и поищи :))


 
bent   (2002-11-10 08:29) [6]

>MBo
>Тогда можно так:
>procedure TForm1.Button1Click(Sender: TObject);
var SR:TSearchRec;
>begin
>if FindFirst("C:\Windows\bluela~1.bmp",faAnyFile,SR)=0 then
> Caption:=SR.FindData.cFileName;
>end;

Этот код даст только полное имя файла, а мне нужен путь



 
MBo   (2002-11-10 08:38) [7]

приведи пример, что есть, а что надо получить


 
bent   (2002-11-10 16:36) [8]

Есть короткий путь файла, типа C:\WINDOWS\РАБОЧИ~1\ТЕКСТО~1.TXT,
а надо C:\WINDOWS\Рабочий стол\Текстовый документ.txt


 
Song   (2002-11-10 16:39) [9]

:-) Дык у тебя же путь-то константой задан, вот и прибавь его сам в Caption. А если была бы не константа, тогда можно так:

Тогда можно так:
procedure TForm1.Button1Click(Sender: TObject);
var SR:TSearchRec;
FileName:String;
begin
FileName:="C:\Windows\bluela~1.bmp";
if FindFirst(FileName,faAnyFile,SR)=0 then
Caption:=ExtractFilePath(FileName)+SR.FindData.cFileName;
end;


 
Danger   (2002-11-11 00:23) [10]

Вот по моему оптимальный вариант для этого:
function GetLongName(const FileName: string): string;
var
GetLongPathName: function (pszShortName, pszLongName: PChar;
cchBuffer: Integer): Integer stdcall;
Handle: HINST;
Buffer: array[0..MAX_PATH-1] of AnsiChar;

function InternalGetLongName(FileName: string): string;
var
SearchRec: TSearchRec;
FindResult: Integer;
Path, S1, S2, SN: string;
begin
if (FileName = "") or
(GetFileAttributes(PChar(FileName)) = $FFFFFFFF) then begin
Result:="";
Exit;
end;
Path:=ExtractFilePath(FileName);
S1:=FileName;
Delete(S1, 1, 1);
if (Path<>"") and (S1<>":") and (S1<>"\") then begin
FindResult:=FindFirst(Path+"*.*", faAnyFile, SearchRec);
try
Result:=FileName;
SN:=ExtractFileName(FileName);
while FindResult = 0 do begin
S2:=SearchRec.Name;
if (SN = S2) or (SN = SearchRec.FindData.cAlternateFileName) then begin
Result:=InternalGetLongName(ExcludeTrailingBackslash(Path))+"\"+S2;
Break;
end;
FindResult:=FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
end else Result:=FileName;

end;

begin
Handle:=GetModuleHandle("kernel32.dll");
@GetLongPathName:=GetProcAddress(handle, "GetLongPathNameA");
if Assigned(GetLongPathName) then begin
if GetLongPathName(PChar(FileName), @Buffer[0], SizeOf(Buffer))<>0
then Result:=PChar(@Buffer[0]) else Result:=FileName;
end else Result:=InternalGetLongName(FileName);
end;


 
bent   (2002-11-11 07:12) [11]

Во!


 
Song   (2002-11-11 09:08) [12]

Пушкой по воробьям... :)


 
Dimka Maslov   (2002-11-11 12:59) [13]

>Song
Пушка работает только под 95 виндой, в которой нет апи функции GetLongPathName, в более поздних версиях эта функция имеется, и именно она и вызывается



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
1-74786
Кирилл
2002-12-11 11:49
2002.12.23
В чем разница между размером компонента в инспекторе ...


3-74574
OlegLeontev
2002-12-03 17:07
2002.12.23
подсказать максимальное количество записей в Paradox 7


4-75063
Atamali Mamedov
2002-11-09 12:06
2002.12.23
ojidat konech programmi


1-74836
Leny
2002-12-11 13:45
2002.12.23
Создание своего значка


14-74955
trotski
2002-12-03 06:22
2002.12.23
Это у меня или все рухнуло?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский