Поиск Файла По Всему Диску

Shouldercannon

Well-known member
25.05.2010
128
0
#1
Нашёл способ, но он не работает в Delphi 2010 если данные подставлять из TEdit или из чего-либо другого. В чём может заключаться проблема?
Код:
uses Imagehlp
...
procedure TForm1.Button1Click(Sender: TObject);
var
FilePath: PAnsiChar;
begin
Button1.Enabled := False;
GetMem(FilePath, MAX_PATH);
if SearchTreeForFile('D:\'{PAnsiChar(Edit1.Text)}, 'test.txt'{PAnsiChar(Edit2.Text)}, FilePath) then ShowMessage ('Найден файл: ' + FilePath);
FreeMem(FilePath);
Button1.Enabled := True;
end;
 

sinkopa

Well-known member
17.06.2009
344
4
#2
Нашёл способ, но он не работает в Delphi 2010 если данные подставлять из TEdit или из чего-либо другого. В чём может заключаться проблема?
Код:
uses Imagehlp
...
procedure TForm1.Button1Click(Sender: TObject);
var
FilePath: PAnsiChar;
begin
Button1.Enabled := False;
GetMem(FilePath, MAX_PATH);
if SearchTreeForFile('D:\'{PAnsiChar(Edit1.Text)}, 'test.txt'{PAnsiChar(Edit2.Text)}, FilePath) then ShowMessage ('Найден файл: ' + FilePath);
FreeMem(FilePath);
Button1.Enabled := True;
end;
Потому что Widestring. :blink:
В Win7 можно использовать SearchTreeForFileW а в XP только кастовать к Ansi
Например так
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
FilePath: PAnsiChar;
a,b: AnsiString;
begin
GetMem(FilePath, MAX_PATH);
a := Edit1.Text;
b := Edit2.Text;
if SearchTreeForFile (PAnsiChar(a), PAnsiChar(b), FilePath) then ShowMessage ('Найден файл: ' + FilePath);
ilePath);
Button1.Enabled := True;
end;
Хотя прямо скажу - это плохо... Потому как в таком "раскладе" у Вас никогда не найдутся файлы включающие национальные символы (умляюты и пр.)...
Ну... что нибудь типа "Mötley Crüe.mpg" например, при кастовании к Ansi станет "Motley Crue.mpg"
 

Shouldercannon

Well-known member
25.05.2010
128
0
#3
Понятно, но оно и не требуется.
Или так
Код:
if SearchTreeForFile(PAnsiChar(AnsiString(Edit1.Text)), PAnsiChar(AnsiString(Edit2.Text)), FilePath) then