windows遍历目录下所有文件
From: http://blog.csdn.net/benbon/article/details/1911230
?
????? 在windows中遍歷目錄下的所有文件主要是使用FindFirstFile和FindNextFile通過遞歸調用實現的,類似于Linux的opendir和readdir。?????? 在MSDN中,FindFirstFile的聲明如下:
HANDLE?FindFirstFile(??LPCTSTR?lpFileName,
??LPWIN32_FIND_DATA?lpFindFileData
);
參數說明:
lpFileNameIf the string ends with a wildcard, period, or directory name, the user must have access to the root and all subdirectories on the path.
In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "//?/" to the path. For more information, see Naming a File.
Windows Me/98/95:??This string must not exceed MAX_PATH characters.返回值說明:
If the function succeeds, the return value is a search handle used in a subsequent call to FindNextFile or FindClose.
If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError.
FindNextFile:
BOOL?FindNextFile(??HANDLE?hFindFile,
??LPWIN32_FIND_DATA?lpFindFileData
);
Parameters
hFindFileThe structure can be used in subsequent calls to FindNextFile to see the found file or directory.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero (0). To get extended error information, call GetLastError.
If no matching files can be found, the GetLastError function returns ERROR_NO_MORE_FILES.
涉及的WIN32_FIND_DATA結構體的聲明:
WIN32_FIND_DATA
?
The WIN32_FIND_DATA structure describes a file found by the FindFirstFile, FindFirstFileEx, or FindNextFile function.
?
typedef struct _WIN32_FIND_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14]; } WIN32_FIND_DATA, *PWIN32_FIND_DATA;Members
dwFileAttributesThis member can be one or more of the following values.
| FILE_ATTRIBUTE_ARCHIVE | The file or directory is an archive file or directory. Applications use this attribute to mark files for backup or removal. |
| FILE_ATTRIBUTE_COMPRESSED | The file or directory is compressed. For a file, this means that all of the data in the file is compressed. For a directory, this means that compression is the default for newly created files and subdirectories. |
| FILE_ATTRIBUTE_DIRECTORY | The handle identifies a directory. |
| FILE_ATTRIBUTE_ENCRYPTED | The file or directory is encrypted. For a file, this means that all data in the file is encrypted. For a directory, this means that encryption is the default for newly created files and subdirectories. |
| FILE_ATTRIBUTE_HIDDEN | The file or directory is hidden. It is not included in an ordinary directory listing. |
| FILE_ATTRIBUTE_NORMAL | The file or directory does not have another attributes set. This attribute is valid only if used alone. |
| FILE_ATTRIBUTE_OFFLINE | The file data is not immediately available. This attribute indicates that the file data has been physically moved to offline storage. This attribute is used by Remote Storage, the hierarchical storage management software. Applications should not arbitrarily change this attribute. |
| FILE_ATTRIBUTE_READONLY | The file or directory is read-only. Applications can read the file, but cannot write to it or delete it. For a directory, applications cannot delete it. |
| FILE_ATTRIBUTE_REPARSE_POINT | The file or directory has an associated reparse point. |
| FILE_ATTRIBUTE_SPARSE_FILE | The file is a sparse file. |
| FILE_ATTRIBUTE_SYSTEM | The file or directory is part of the operating system, or is used exclusively by the operating system. |
| FILE_ATTRIBUTE_TEMPORARY | The file is being used for temporary storage. File systems attempt to keep all of the data in memory for quick access, rather than flushing it back to mass storage. A temporary file should be deleted by the application as soon as it is not needed. |
If the underlying file system does not support creation time, this member is 0 (zero).
For a file, the structure specifies when the file is last read from, written to, or, in the case of executable files, run.
For a directory, the structure specifies when the directory is created. If the underlying file system does not support last access time, this member is 0 (zero).On the FAT file system, the specified date for both files and directories is correct, but the time of day is always set to midnight.
For a file, the structure specifies when the file is last written to, truncated, or overwritten (for example, with WriteFile or SetEndOfFile). This date and time is not updated when file attributes or security descriptors are changed.
For a directory, the structure specifies when the directory is created. If the underlying file system does not support last write time, this member is 0 (zero).This value is 0 (zero) unless the file size is greater than MAXDWORD.
The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow.
Otherwise, this value is undefined and should not be used.
This name is in the classic 8.3 (filename.ext) file name format.
下面是實現的一個例子:
?
/**//*******************************?*?????函數名:FindFile
?*?????輸入參數:pFilePath(路徑)
?*?????輸出參數:無
?*?????功能
*********************************/
void?FindFile(char?*?pFilePath)
...{
????WIN32_FIND_DATA?FindFileData;
????HANDLE?hFind?=?INVALID_HANDLE_VALUE;
????char?DirSpec[MAX_PATH?+?1];// 指定路徑
????DWORD?dwError;
????strncpy?(DirSpec,?pFilePath,?strlen(pFilePath)?+?1);
????strncat?(DirSpec,?"/*",?3);
????hFind?=?FindFirstFile((DirSpec,?&FindFileData);
????if?(hFind?==?INVALID_HANDLE_VALUE)
????...{
????????printf?("Invalid?file?handle.?Error?is?%u ",?GetLastError());
????????return?;
????}
????else
????...{
????????if?(FindFileData.dwFileAttributes?!=?FILE_ATTRIBUTE_DIRECTORY?)
????????...{
????????????printf?(" %s ",?FindFileData.cFileName);?? //找到文件
????????}
????????else?if(FindFileData.dwFileAttributes?==?FILE_ATTRIBUTE_DIRECTORY
????????????&&?strcmp(FindFileData.cFileName,?".")?!=?0
????????????&&?strcmp(FindFileData.cFileName,?"..")?!=?0)
????????...{?? //找到目錄
????????????char?Dir[MAX_PATH?+?1];
????????????strcpy(Dir,?pFilePath);
????????????strncat(Dir,?"/",?2);
????????????strcat(Dir,?FindFileData.cFileName);
????????????FindFile(Dir);
????????}
????????while?(FindNextFile(hFind,?&FindFileData)?!=?0)
????????...{
????????????if?(FindFileData.dwFileAttributes?!=?FILE_ATTRIBUTE_DIRECTORY)
????????????...{?? //找到文件
????????????????printf?(" %s ",?FindFileData.cFileName);
????????????}
????????????else?if(FindFileData.dwFileAttributes?==?FILE_ATTRIBUTE_DIRECTORY
????????????????&&?strcmp(FindFileData.cFileName,?".")?!=?0
????????????????&&?strcmp(FindFileData.cFileName,?"..")?!=?0)
????????????...{ //找到目錄
????????????????char?Dir[MAX_PATH?+?1];
????????????????strcpy(Dir,?pFilePath);
????????????????strncat(Dir,?"/",?2);
????????????????strcat(Dir,?FindFileData.cFileName);
????????????????FindFile(Dir);
????????????}
????????}
????????dwError?=?GetLastError();
????????FindClose(hFind);
????????if?(dwError?!=?ERROR_NO_MORE_FILES)
????????...{
????????????printf?("FindNextFile?error.?Error?is?%u ",?dwError);
????????????return;
????????}
????}
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的windows遍历目录下所有文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HWSD土壤数据集下载及打开方法
- 下一篇: CentOS搭建Sqoop环境