標籤:原因 span logs 資料 nba ade direct color 備份
註:本文討論的是怎麼用Windows API遍曆目錄下的所有檔案。除Windows API,還有一種Windows/Linux通用的方式,使用<io.h>。
WIN32_FIND_DATA結構
遍曆目錄下的檔案需要用到WIN32_FIND_DATA結構。實際上有兩種結構:WIN32_FIND_DATAA和WIN32_FIND_DATAW。A和W分別代表ASCII和寬字元(Unicode)。定義UNICODE宏時,WIN32_FIND_DATA指WIN32_FIND_DATAW;否則指WIN32_FIND_DATAA。
下面是兩個結構的定義(minwinbase.h,VS2015):
typedef struct _WIN32_FIND_DATAA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; _Field_z_ CHAR cFileName[ MAX_PATH ]; _Field_z_ CHAR cAlternateFileName[ 14 ];#ifdef _MAC DWORD dwFileType; DWORD dwCreatorType; WORD wFinderFlags;#endif} WIN32_FIND_DATAA;typedef struct _WIN32_FIND_DATAW { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; _Field_z_ WCHAR cFileName[ MAX_PATH ]; _Field_z_ WCHAR cAlternateFileName[ 14 ];#ifdef _MAC DWORD dwFileType; DWORD dwCreatorType; WORD wFinderFlags;#endif} WIN32_FIND_DATAW;
關於_MAC宏的部分可以忽略, 這是有曆史原因的——曾今Microsoft是Mac的最大開發人員,為了方便Windows上的應用移植到Mac上,就使用_MAC宏,如果是Mac作業系統_MAC就是有定義的。(根據Stack Overflow)因為這裡說的是Windows,就先把這個放一邊。
下面是每個結構成員的含義:
dwFileAttributes
一個檔案的檔案屬性。
檔案屬性常量:
FILE_ATTRIBUTE_ARCHIVE(0x20):檔案或目錄是檔案檔案或目錄。應用程式使用這種屬性標記檔案,表示備份或移除。
FILE_ATTRIBUTE_COMPRESSED(0x800):檔案或目錄是壓縮的。對於一個檔案,其中的所有資料都是壓縮的。對於一個目錄,對於新建立的檔案和子目錄預設壓縮。
FILE_ATTRIBUTE_DIRECTORY(0x40):這個值保留給系統使用。
FILE_ATTRIBUTE_DIRECTORY(0x10):標記一個目錄的控制代碼。
FILE_ATTRIBUTE_ENCRYPTED(0x10):檔案或目錄是加密的。對於一個檔案,所有的資料流都被加密了。對於一個目錄,對於新建立的檔案和子目錄預設加密。
FILE_ATTRIBUTE_HIDDEN(0x2):檔案或目錄是隱藏的。遍曆檔案夾時一般不考慮它們。
FILE_ATTRIBUTE_INTEGRITY_STREAM(0x8000):
(TO BE CONTINUED, DO NOT REPRODUCE)
C/C++遍曆目錄下的所有檔案(Windows篇,超詳細)