Suchfunktionen für Dateinamen

Diese Funktionen suchen nach angegebenen Dateinamen und schließen die Suche ab:

Hinweise

Die _findfirst -Funktion stellt Informationen über das erste Vorkommen eines Dateinamens zur Verfügung, der mit der im Argument filespec angegebenen Datei übereinstimmt. Sie können in filespec beliebige Kombinationen von Platzhalterzeichen verwenden, die vom Hostbetriebssystem unterstützt werden.

Die Funktionen geben Dateiinformationen in einer _finddata_t Struktur zurück, die in IO.h. Verschiedene Funktionen in der Familie verwenden viele Varianten der _finddata_t -Struktur. Die grundlegende _finddata_t -Struktur umfasst die folgenden Elemente:

unsigned attrib
Dateiattribut.

time_t time_create
Zeitpunkt der Dateierstellung (-1L für FAT-Dateisysteme). Die Uhrzeit wird im UTC-Format gespeichert. Verwenden Sie localtime_s, um sie in die lokale Uhrzeit zu konvertieren.

time_t time_access
Zeitpunkt des letzten Dateizugriffs (-1L für FAT-Dateisysteme). Die Uhrzeit wird im UTC-Format gespeichert. Verwenden Sie localtime_s, um sie in die lokale Uhrzeit zu konvertieren.

time_t time_write
Zeitpunkt des letzten Schreibzugriffs auf die Datei. Die Uhrzeit wird im UTC-Format gespeichert. Verwenden Sie localtime_s, um sie in die lokale Uhrzeit zu konvertieren.

_fsize_t size
Die Länge der Datei in Byte.

char name[ _MAX_PATH] NULL-terminated name of matched file or directory, without the path.

In Dateisystemen, die die Erstellung und die letzten Zugriffszeiten einer Datei nicht unterstützen, wie z. B. das FAT-System, sind die time_create felder time_access immer -1L.

_MAX_PATH ist in Stdlib.h 260 Bytes definiert.

Sie können keine Zielattribute (z _A_RDONLY. B. ) angeben, um den Suchvorgang einzuschränken. Diese Attribute werden im attrib Feld der _finddata_t Struktur zurückgegeben und können die folgenden Werte aufweisen (definiert in IO.h). Benutzer sollten sich nicht darauf verlassen, dass diese Attribute die einzigen Werte sind, die für das attrib Feld möglich sind.

_A_ARCH
Archiv. Legen Sie fest, wann immer die Datei vom BACKUP Befehl geändert und gelöscht wird. Wert: 0x20.

_A_HIDDEN
Versteckte Datei. Wird nicht häufig mit dem DIR Befehl angezeigt, es sei denn, Sie verwenden die /AH Option. Gibt Informationen über normale Dateien und über Dateien, die dieses Attribut aufweisen, zurück. Wert: 0x02.

_A_NORMAL
Normal. Für die Datei sind keine weiteren Attribute festgelegt. Sie kann ohne Einschränkungen gelesen oder geschrieben werden. Wert: 0x00.

_A_RDONLY
Schreibgeschützt. Die Datei kann nicht zum Schreiben geöffnet werden, und eine Datei mit demselben Namen kann nicht erstellt werden. Wert: 0x01.

_A_SUBDIR
Unterverzeichnis. Wert: 0x10.

_A_SYSTEM
Systemdatei. Wird nicht mit dem DIR Befehl ordinär gesehen, es sei denn, die /A Option wird /A:S verwendet. Wert: 0x04.

_findnext sucht den nächsten Namen, falls vorhanden, der mit dem filespec -Argument übereinstimmt, das in einem vorhergegangenen Aufruf von _findfirstangegeben wurde. Das fileinfo -Argument sollte auf eine Struktur verweisen, die durch den vorhergehenden Aufruf von _findfirstinitialisiert wurde. Wenn eine Übereinstimmung gefunden wird, wird der Inhalt der fileinfo -Struktur wie zuvor beschrieben geändert. Andernfalls bleibt sie unverändert. _findclose schließt das angegebene Suchhandle und gibt alle zugeordneten Ressourcen sowohl für _findfirst als auch für _findnextfrei. Das von _findfirst oder _findnext zurückgegebene Handle muss zuerst an _findcloseübergeben werden, bevor Änderungsvorgänge, wie etwa Löschen, für die Verzeichnisse ausgeführt werden können, die in den übergebenen Pfaden vorkommen.

Die _find -Funktionen können verschachtelt werden. Wenn ein Aufruf von _findfirst oder _findnext beispielsweise feststellt, dass sich die Datei in einem Unterverzeichnis befindet, kann eine neue Suche mit einem weiteren Aufruf von _findfirst oder _findnexteingeleitet werden.

_wfindfirst und _wfindnext sind Breitzeichenversionen von _findfirst und _findnext. Das Strukturargument der Breitzeichenversionen weist den Datentyp auf, der _wfinddata_t in IO.h und in Wchar.h. Die Felder dieses Datentyps sind identisch mit den Feldern des _finddata_t Datentyps, mit der Ausnahme, dass das _wfinddata_tname Feld vom Typ wchar_t anstelle des Typs charist. _wfindfirst Andernfalls verhalten sie _wfindnext sich identisch mit _findfirst und _findnext.

_findfirst und _findnext verwenden den 64-Bit-Uhrzeittyp. Wenn Sie stattdessen den alten 32-Bit-Uhrzeittyp verwenden müssen, können Sie _USE_32BIT_TIME_Tdefinieren. Die Versionen dieser Funktionen mit dem 32 Suffix in ihren Namen verwenden den 32-Bit-Zeittyp, und die Versionen mit dem 64 Suffix verwenden den 64-Bit-Zeittyp.

Die Funktionen _findfirst32i64, _findnext32i64, _wfindfirst32i64und _wfindnext32i64 verhalten sich ebenfalls identisch wie die Versionen dieser Funktionen mit dem 32-Bit-Uhrzeittyp, mit dem Unterschied, dass sie 64-Bit-Dateilängen verwenden und zurückgeben. Die Funktionen _findfirst64i32, _findnext64i32, _wfindfirst64i32und _wfindnext64i32 verwenden den 64-Bit-Uhrzeittyp, aber Dateilängen von 32 Bit. Diese Funktionen verwenden entsprechende Varianten des _finddata_t -Typs, bei denen die Felder verschiedene Typen für die Uhrzeit und die Dateigröße aufweisen.

_finddata_t ist tatsächlich ein Makro, das zu _finddata64i32_t ausgewertet wird (oder _finddata32_t , wenn _USE_32BIT_TIME_T definiert ist). In der folgenden Tabelle sind die Varianten von _finddata_tzusammengefasst:

Struktur Uhrzeittyp Dateigrößentyp
_finddata_t, _wfinddata_t __time64_t _fsize_t
_finddata32_t, _wfinddata32_t __time32_t _fsize_t
__finddata64_t, _wfinddata64_t __time64_t __int64
_finddata32i64_t, _wfinddata32i64_t __time32_t __int64
_finddata64i32_t, _wfinddata64i32_t __time64_t _fsize_t

_fsize_t ist für unsigned long eine typedef (32 Bits).

Beispiel

// crt_find.c
// This program uses the 32-bit _find functions to print
// a list of all files (and their attributes) with a .C extension
// in the current directory.

#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <time.h>

int main( void )
{
   struct _finddata_t c_file;
   intptr_t hFile;

   // Find first .c file in current directory
   if( (hFile = _findfirst( "*.c", &c_file )) == -1L )
      printf( "No *.c files in current directory!\n" );
   else
   {
      printf( "Listing of .c files\n\n" );
      printf( "RDO HID SYS ARC  FILE         DATE %25c SIZE\n", ' ' );
      printf( "--- --- --- ---  ----         ---- %25c ----\n", ' ' );
      do {
         char buffer[30];
         printf( ( c_file.attrib & _A_RDONLY ) ? " Y  " : " N  " );
         printf( ( c_file.attrib & _A_HIDDEN ) ? " Y  " : " N  " );
         printf( ( c_file.attrib & _A_SYSTEM ) ? " Y  " : " N  " );
         printf( ( c_file.attrib & _A_ARCH )   ? " Y  " : " N  " );
         ctime_s( buffer, _countof(buffer), &c_file.time_write );
         printf( " %-12s %.24s  %9ld\n",
            c_file.name, buffer, c_file.size );
      } while( _findnext( hFile, &c_file ) == 0 );
      _findclose( hFile );
   }
}
Listing of .c files

RDO HID SYS ARC  FILE         DATE                           SIZE
--- --- --- ---  ----         ----                           ----
N   N   N   Y   blah.c       Wed Feb 13 09:21:42 2002       1715
N   N   N   Y   test.c       Wed Feb 06 14:30:44 2002        312

Siehe auch

Systemaufrufe