Здравствуйте всем. Снова я. И снова проблемы из-за не великих познаниях в апи. На этот раз с поиском файлов в папках и подпапках.
Дело в том, что я перепиливаю на апи вот эту функцию.
Code
procedure GetAllFiles(mask: string);
var
search: TSearchRec;
directory: string;
begin
directory := ExtractFilePath(mask);
if FindFirst(mask, $23, search) = 0 then
begin
repeat
Form1.ListBox1.Items.Add(directory + search.Name);
until FindNext(search) <> 0;
end;
if FindFirst(directory + '*.*', faDirectory, search) = 0 then
begin
repeat
if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> '.') then
GetAllFiles(directory + search.Name + '\' + ExtractFileName(mask));
until FindNext(search) <> 0;
FindClose(search);
end;
end;
Получилось что-то вроде того:
Code
function ScanFile(Dir, Mask: string; var Buff: array of string): integer;
var
hF: DWORD;
C: integer;
FData: _WIN32_FIND_DATA;
begin
C:=0;
hF:=FindFirstFile(PAnsiChar(Dir+Mask), FData);
if hF<>INVALID_HANDLE_VALUE then
begin
while (FindNextFile(hF, FData)) do
begin
Buff[C-1]:=(Dir+(FData.cFileName));
C:=C+1;
end;
Windows.FindClose(hF);
end;
hF:=FindFirstFile(PChar(Dir), FData);
if hF<>INVALID_HANDLE_VALUE then
begin
repeat
if ((FData.dwFileAttributes and fadirectory)=fadirectory) and (FData.cFileName[1]<>'.') then
ScanFile(Dir+FData.cFileName+'\'+(ExtractFileName(Dir)), Mask, Buff);
until (FindNextFile(hF, FData)=true);
Windows.FindClose(hF);
end;
Result:=C;
end;
Суть функции: она должна найти всё файлы в подпапках и записать их в массив. В результате функция должна вернуть количество найденных файлов. (Тут это криво реализовано - подсчет каждой найденного файла. Лучше в конце подсчитать количество элементов в массиве).
Проблема в том, что верхняя функция (не перепилиная) работает как надо, а моя заносит в массив лишь те файлы, которые хранятся в папках, откуда был начат поиск. Видимо я что-то не правильно переписал...
Помогите, пожалуйста, допилить эту функцию до полностью рабочего состояния...