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