_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 );
   }
}
  

请参见

参考

系统调用