在此之前需要了解 WIN32_FIND_DATA的結構 以及 FindFirstFile、 FindNextFile原型以及用法注意事項傳送門如下
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365740(v=vs.85).aspx
涉及的宏定義
------------------------------------------------------------------------------------------------------------------------------------------------
|
A file or directory that is an archive file or directory. Applications typically use this attribute to markfiles for backup or removal.存檔類
|
|
A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories.
|
|
This value is reserved for system use.驅動類
|
|
The handle that identifies a directory.目錄類
|
|
A file or directory that is encrypted. For a file, all data streams in the file are encrypted. For a directory, encryption is the default for newly created files and subdirectories.
|
|
The file or directory is hidden. It is not included in an ordinary directory listing.隱藏
|
|
The directory or user data stream is configured with integrity (only supported on ReFS volumes). It is not included in an ordinary directory listing. The integrity setting persists with the file if it's renamed. If a file is copied the destination file will have integrity set if either the source file or destination directory have integrity set.
Windows Server2008R2, Windows7, Windows Server2008, WindowsVista, Windows Server2003, and WindowsXP:This flag is not supported until Windows Server2012.
|
|
A file that does not have other attributes set. This attribute is valid only when used alone.普通
|
|
The file or directory is not to be indexed by the content indexing service.
|
|
The user data stream not to be read by the background data integrity scanner (AKA scrubber). When set on a directory it only provides inheritance. This flag is only supported on Storage Spaces and ReFS volumes. It is not included in an ordinary directory listing.
Windows Server2008R2, Windows7, Windows Server2008, WindowsVista, Windows Server2003, and WindowsXP:This flag is not supported until Windows8 and Windows Server2012.
|
|
The data of a file is not available immediately. This attribute indicates that the file data is physically moved to offline storage. This attribute is used by Remote Storage, which is the hierarchical storage management software. Applications should not arbitrarily change this attribute.
|
|
A file that is read-only. Applications can read the file, but cannot write to it or delete it. This attribute is not honored on directories. For more information, see You cannot view or change the Read-only or the System attributes of folders in Windows Server 2003, in Windows XP, in Windows Vista or in Windows 7.
|
|
A file or directory that has an associated reparse point, or a file that is a symbolic link.
|
|
A file that is a sparse file.
|
|
A file or directory that the operating system uses a part of, or uses exclusively.系統文件
|
|
A file that is being used for temporary storage. File systems avoid writing data back to mass storage ifsufficient cache memory is available, because typically, an application deletes a temporary file after the handleis closed. In that scenario, the system can entirely avoid writing the data. Otherwise, the data is written afterthe handle is closed.臨時文件
|
|
This value is reserved for system use.虛擬文件(系
|
出自:https://baike.baidu.com/item/WIN32_FIND_DATA
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我的理解上述宏定義:
●FILE_ATTRIBUTE_ARCHIVE——文件包含歸檔屬性。
●FILE_ATTRIBUTE_COMPRESSED——文件和目錄被壓縮。
●FILE_ATTRIBUTE_DIRECTORY——找到的是一個目錄。
●FILE_ATTRIBUTE_HIDDEN——文件包含隱含屬性。
●FILE_ATTRIBUTE_NORMAL——文件沒有其他屬性。
●FILE_ATTRIBUTE_READONLY——文件包含只讀屬性。
●FILE_ATTRIBUTE_SYSTEM——文件包含系統屬性。
●FILE_ATTRIBUTE_TEMPORARY——文件是一個臨時文件
HANDLE
FindFirstFile(
LPCTSTR
lpFileName,
//filename
LPWIN32_FIND_DATA lpFindFileData
//databuffer
);
參數說明
返回值
參數說明
返回值
#include <stdio.h>
#include <string>
#define ParaPath "path"
source files:
#include "loadfileDemo.h"
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <IO.h>
//緩存大小
#define LEN 1024
//給定路徑查詢該目錄下所有文件,並輸出文件名跟路徑
bool find(char * lpPath)
{
char findPath[LEN];
WIN32_FIND_DATA FindFileData; //首先了解 WIN32_FIND_DATA結構
strcpy(findPath,lpPath);
strcat(findPath,"*.*");
HANDLE hFind=::FindFirstFile(findPath,&FindFileData);// 路徑,查找緩沖區為形參
if(INVALID_HANDLE_VALUE == hFind) //查找失敗 宏定義為無效值 0xFFFFFFFF 即-1
return false;
while(TRUE)
{
if(FindFileData.dwFileAttributes && FILE_ATTRIBUTE_DIRECTORY) //判斷是否是文件
{
if(FindFileData.cFileName[0]!='.')//排除根目錄\.. \.
{
strcpy(findPath,lpPath);
strcat(findPath,FindFileData.cFileName);
printf("findPath:%s\n",findPath);
printf("FileData:%s\n",FindFileData.cFileName);
}
if(!FindNextFile(hFind,&FindFileData)) //目錄不為空指針往后移動
break;
}
}
FindClose(hFind);
return true;
}
int main(void)
{
char *str = ParaPath;
if(find(str)) //傳入需要查找的路徑
{
printf("success!\n");
}
else
{
printf("fail!\n");
}
return 0;
}