Procedury FindFirst i FindNext Procedury FindFirst (znajdź pierwszy) i FindNext (znajdź kolejny) służą do wyszukiwania plików lub katalogów spełniających określone kryteria. Pozwalają na sprawdzenie istnienia pliku lub katalogu, wylistowanie zawartości katalogu lub nawet całego dysku. Procedura FindFirst posiada trzy następujące argumenty Procedure FindFirst(Path : String; Attr : Word; Var R : SearchRec); Pierwszy z nich Path określa ścieżkę dostępu do pliku lub katalogu. Argument ten może zawierać znaki wieloznaczne * i ? - określa wówczas wzorzec nazwy poszukiwanego zbioru, w przypadku przeciwnym, gdy Path nie zawiera znaków wieloznacznych, wskazuje konkretny plik lub katalog. Przykładowe wywołanie procedury FindFirst('C:\Autoexec.bat', 0, R); pozwala stwierdzić czy plik Autoexec.bat istnieje na dysku C: w katalogu głównym. Jeżeli procedura odnajdzie plik to zmienna DosError otrzyma wartość 0, dodatkowo pola rekodu R zawierać będą informacje o tym pliku. Po błędnym wykonaniu procedury wartość zmiennej DosError jest różna od zera, przy czym wartość 18 oznacza wykonanie poprawne i wskazuje na brak poszukiwanego pliku. W ten sposób można sprawdzić istnienie dowolnego katalogu FindFirst('C:\Windows\Temp', Directory, R); {UWAGA: Nie do końca to prawda...} If DosError=0 Then WriteLn('Katalog C:\Windows\Temp istnieje'); Parametr Attr określa atrybuty jakie powinien posiadać poszukiwany zbiór i z nimi właśnie związana jest uwaga podana w komentarzu. Procedura FindFirst bez względu na podane atrybuty zawsze wyszukuje wszystkie pliki zwykłe pasujące do wzorca nazwy. Poprzez pojęcie plik zwykły rozumie się taki plik, który posiada ustawione co najwyżej dwa atrybuty Archive oraz ReadOnly - zbiory z atrybutem ukryty (Hidden), systemowy (SysFile) lub katalog (Directory) nie są plikami zwykłymi. Chcąc odnaleźć taki zbiór należy wyrażnie określić to w parametrze Attr dodając odpowiednią stałą lub skorzystać ze stałej AnyFile. Poniżej podano przykładowe wartości parametru Attr: Wartość patametru Określa pliki 0 wszystkie pliki zwykłe SysFile+Hidden wszystkie pliki AnyFile wszystkie pliki i katalogi oraz etykieta dysku AnyFile-VolumeID-Directory wszystkie pliki, oprócz katalogów i etykiety dysku, łacznie z plikami systemowymi i ukrytymi Directory+SysFile wszystkie pliki zwykłe i katalogi za wyjątkiem ukrytych, oprócz etykiety dysku Taki sposób działania procedury FindFirst tłumaczy dlaczego powyższy przykład nie jest do końca poprawny - może się bowiem okazać, że procedura znajdzie w katalogu C:\Windows plik o nazwie Temp - można więc twierdzić na podstawie DosError=0, że znaleziono zbiór, ale niekoniecznie musi być to katalog. Chcąc za pomocą tej procedury sprawdzić istnienie katalogu należałoby zrobić to w sposób następujący: FindFirst('C:\Windows\Temp', Directory, R); If DosError=0 Then Begin FindFirst('C:\Windows\Temp', AnyFile-Directory-VolumeID, R); If DosError<>0 Then WriteLn('Katalog C:\Windows\Temp istnieje'); End; - znajdź plik lub katalog i jeśli występuje, to ponownie znajdź plik - jeśli nie ma takiego pliku, to zbiór znaleziony poprzednio był katalogiem.