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 _findfirst
angegeben wurde. Das fileinfo
-Argument sollte auf eine Struktur verweisen, die durch den vorhergehenden Aufruf von _findfirst
initialisiert 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 _findnext
frei. 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 _findnext
eingeleitet 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_t
name
Feld vom Typ wchar_t
anstelle des Typs char
ist. _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_T
definieren. 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
, _wfindfirst32i64
und _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
, _wfindfirst64i32
und _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_t
zusammengefasst:
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