Главная страница
    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.58 MB
Время: 0.038 c
1-74808
drin
2002-12-11 00:42
2002.12.23
Ресурсы


1-74662
MegaVoltik
2002-12-10 14:46
2002.12.23
Помогите!


1-74649
Витьок
2002-12-12 17:34
2002.12.23
Help!!!


3-74563
Vladk
2002-12-04 13:17
2002.12.23
SP


1-74772
danilka
2002-12-11 10:09
2002.12.23
SimpleXML - как пользоваться :))





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский