![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск файлов [D7, WinXP]
Dot © (2005-11-05 17:17:00)Здравствуйте мастера!
Меня интересует вопрос поиска файла во всех директориях.
Вот я набросал код
------------
program FindFiles;
uses Windows;
var
File_data: _WIN32_FIND_DATA;
File_Name: PChar;
hFind : Cardinal;
begin
File_Name:='*.txt';
hFind := FindFirstFile(File_Name, File_Data);
if hFind = INVALID_HANDLE_VALUE then
begin
MessageBoxA(0, PChar(GetLastError()), '!', 0);
exit;
end
else
begin
MessageBoxA(0, File_Data.cFileName,'!',0);
FindClose(hFind);
end;
end.
------------------------
Не совершенство конечно, но дело не в этом. Все это происходит в пределах текущей директории проекта..
Вот и вопрос . помогите советом или кодом (что лучше всего). Как искать во всех(заданных) директориях.
Заранее огромное спасибо.
З.Ы. использую только модуль Windows, естественно никаких TSearchRec итд
Zeqfreed (2005-11-05 17:52:00) [1]Dot (05.11.05 17:17)
program flist;
{$APPTYPE CONSOLE}
uses
Windows;
procedure Output(const FileName : String);
var
p : PChar;
begin
p := PChar(FileName);
CharToOEM(p, p);
WriteLn(p);
end;
procedure AddTrailingBackslash(var Str : String);
begin
if not (Str[length(Str)] in ['/', '\']) then Str := Str + '\';
end;
procedure DoSearch(Directory : String; const SearchSubdirectories : Boolean);
var
fd : TWin32FindData;
h : Cardinal;
begin
AddTrailingBackslash(Directory);
Output('Поиск по директории: ' + Directory);
h := FindFirstFile(PChar(Directory + '*'), fd);
if (h <> INVALID_HANDLE_VALUE) then begin
repeat
if (fd.cFileName[0] <> '.') and (fd.cFileName <> '..') then
if ((fd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) then begin
DoSearch(Directory + fd.cFileName, SearchSubdirectories);
end else
Output(fd.cFileName);
until (FindNextFile(h, fd) = FALSE);
end;
end;
begin
DoSearch(ParamStr(1), true);
ReadLn;
end.