_find, _wfind功能
这些功能搜索和关闭的搜索中指定的文件名:
备注
_findfirst 功能提供有关与 filespec 参数中指定的文件文件名的第一个实例的信息。在 filespec 可以使用由主机操作系统支持通配符的任意组合。
函数返回在 _finddata_t 结构的文件信息,如 IO.h 定义。在系列的各种功能使用在 _finddata_t framework 的许多变体。基本 _finddata_t 结构包含以下元素:
unsigned attrib
文件属性。time_t time_create
文件创建的时间 (– FAT 文件系统的 1L)。这次 UTC 格式存储。若要转换为本地时间,请使用 localtime_s。time_t time_access
最后一个文件访问的时间 (– FAT 文件系统的 1L)。这次 UTC 格式存储。若要转换为本地时间,请使用 localtime_s。time_t time_write
最后编写的时间到文件中。这次 UTC 格式存储。若要转换为本地时间,请使用 localtime_s。_fsize_t size
文件的字节长度。char name[ _MAX_PATH]
匹配的文件或目录的 null 终止的名称,不带路径。
在不支持创建,并一个文件之前访问时间,如 FAT 系统, time_create和 time_access字段始终是的文件系统 (1L。
_MAX_PATH在 Stdlib.h 定义为 260 字节。
不能指定目标属性 (例如 _A_RDONLY) 限制查找操作。这些属性。 attrib 返回 _finddata_t结构字段,并可以具有下列值 (定义在 IO.h)。用户不应依赖于的这些特有的值可以为 attrib 字段。
_A_ARCH
存档。设置,只要文件更改并 BACKUP 命令清除。值:0x20._A_HIDDEN
隐藏文件。通常不会看到与 DIR 命令,,除非使用 /AH 选项。返回有关具有此特性的规则文件和文件的信息。值:0x02._A_NORMAL
正常。文件未设置其他特性可以对未限制读取或写入。值:0x00._A_RDONLY
只读。文件无法进行写入,并具有的文件相同名称不能创建。值:0x01._A_SUBDIR
子目录。值:0x10._A_SYSTEM
系统文件。通常不会看到与 DIR 命令,,除非使用 /A 或 /A:S 选项。值:0x04.
_findnext 查找下一个名称,如果有,与指定的 filespec 参数之前调用对 _findfirst。fileinfo 参数应指向上初始化的结构调用 _findfirst。如果找到匹配项, fileinfo framework 目录中更改如前面所述。否则,它保持不变。_findclose 关闭指定搜索句柄并释放 _findfirst 和 _findnext的所有关联的资源。必须先通过 _findfirst 或 _findnext 返回的句柄,_findclose,在修改操作,如删除,在形成路径传递给它们的内容之前上执行。
可以嵌套 _find 功能。例如,在中,如果对 _findfirst 或 _findnext 的调用查找是子目录中的文件,新搜索可以开始使用再次调用 _findfirst 或 _findnext。
_wfindfirst 和 _wfindnext 是 _findfirst 和 _findnext的宽字符版本。宽字符版本的结构参数具有 _wfinddata_t 数据类型,则定义在 IO.h 和在 Wchar.h。此数据类型的字段相同。这些 _finddata_t 数据类型,不同之处在于,在 _wfinddata_t 名称字段是类型 wchar_t 而不是类型 char。否则 _wfindfirst 和 _wfindnext 方法的行为与 _findfirst 和 _findnext。
_findfirst 和 _findnext 使用 64 位时类型。如果必须使用旧 32 位时类型,可以定义 _USE_32BIT_TIME_T。具有 32 后缀在其名称这些功能的版本使用 32 位时间类型以及在与 64 后缀使用 64 位时类型。
函数 _findfirst32i64, _findnext32i64, _wfindfirst32i64,并且, _wfindnext32i64 同样也行为与这些功能的 32 位时类型版本,只不过它们使用并返回 64 位文件长度。函数 _findfirst64i32、 _findnext64i32、 _wfindfirst64i32和 _wfindnext64i32使用 64 位时类型,但使用 32 位文件长度。字段有时间和文件大小不同类型的 _finddata_t 这些功能使用适当的变体输入。
_finddata_t 实际上是计算结果为 _finddata64i32_t 的宏 (或 _finddata32_t ,如果 _USE_32BIT_TIME_T 定义)。下表总结了 _finddata_t的差异:
结构 |
时间类型 |
文件大小类型 |
---|---|---|
_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 是 unsigned long (32 位) typedef 。
示例
// 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 );
}
}