共用方式為


_find,_wfind 函式

這些函式會搜尋,並關閉搜尋指定的檔名:

備註

_findfirst函式提供符合指定的檔案的檔名的第一個執行個體的相關資訊filespec引數。 您可以使用filespec主機作業系統所支援任何萬用字元的字元組合。

函式會傳回檔案資訊中 _finddata_t IO.h 中所定義的結構。 使用許多不同的版本不同的函式家族_finddata_t結構。 基本_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結構內容已變更,如先前所述。 否則,會保持不變。 _findclose關閉指定的搜尋控制代碼,並釋放所有相關的資源都_findfirst和_findnext。 傳回由其中一個控點_findfirst或_findnext必須先傳送到 _findclose、 修改的作業,例如刪除,才能執行形成傳遞給它們的路徑的目錄。

您可以使用巢狀_find函式。 例如,如果呼叫_findfirst或_findnext子目錄時,新的搜尋的檔案可以被初設與另一個呼叫的尋找_findfirst或_findnext。

_wfindfirst與_wfindnext的寬字元版本_findfirst和_findnext。 結構引數的寬字元版本的_wfinddata_t Wchar.h 和 IO.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_tis a typedef for unsigned long (32 bits).

範例

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

請參閱

參考

系統呼叫