tak też robiłem i to jest dla mnie za wolno
interesuje mnie jakaś funkcja która nie bedzie trzepała po dysku i zwróci mi w jakiej kolwiek strukturze informację o katalogach w danym katalogu bądź na całym dysku
Funkcja findnext działa następująco:
function FindNext(var F: TSearchRec): Integer;
begin
if FindNextFile(F.FindHandle, F.FindData) then //tutaj następuje znalezienie pierwszego lepszego pliku
Result := FindMatchingFile(F) else //funkcja FindMatchingFile sprawdza czy to co znaleziono spełnia warunki
Result := GetLastError;
end;
funkcja FindMatchingFile wygląda następująco:
function FindMatchingFile(var F: TSearchRec): Integer;
var
LocalFileTime: TFileTime;
begin
with F do
begin
while FindData.dwFileAttributes and ExcludeAttr <> 0 do //jeżeli plik nie pasuje do wzorca to pobieraj następny plik znajdujący się w katalogu w przeciwnym przypadku wypelnij strukture tSearchRec
if not FindNextFile(FindHandle, FindData) then
begin
Result := GetLastError;
Exit;
end;
FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
FileTimeToDosDateTime(LocalFileTime, LongRec(Time).Hi,
LongRec(Time).Lo);
Size := FindData.nFileSizeLow;
Attr := FindData.dwFileAttributes;
Name := FindData.cFileName;
end;
Result := 0;
end;
tak więc widać że i tak pomimo nałożonych ograniczeń funkcja przelatuje przez cały katalog i odczytuje wszytkie pliki w nim znajdujące się