Форум: "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.009 c