windows下遍历文件夹

Github地址

函数:

1 HANDLE WINAPI FindFirstFile(
2   _In_  LPCTSTR           lpFileName,
3   _Out_ LPWIN32_FIND_DATA lpFindFileData
4 );
BOOL WINAPI FindNextFile(
  _In_  HANDLE            hFindFile,
  _Out_ LPWIN32_FIND_DATA lpFindFileData
);

@ LPCTSTR与char *的转换

参考资料:TCHAR与char的互转

LPCTSTR会根据当前的字符集进行自适应:如果为ANSI,LPCTSTR = const char *;如果为Unicode,LPCTSTR = const wchar_t *;

但LPCTSTR = const wchar_t *时,需要使用WideCharToMultiByte() / MultiByteToWideChar()函数;

 

@ FindFirstFile()

由这个函数返回的句柄可以作为一个参数用于FindNextFile函数。这样一来,就可以方便的枚举出与lpFileName参数指定的文件名相符的所有文件。

 

@ 核心代码

 1 void GetRawImagePath(TCHAR* folder, std::vector<TCHAR *> &image_path)
 2 {
 3     WIN32_FIND_DATA FindFileData;
 4     HANDLE hFind;
 5     TCHAR path[1000];
 6     lstrcpy(path, folder);
 7     lstrcat(path, _T("\\"));
 8     lstrcat(path, _T("*.*"));  /**必须加*.*才能搜索文件夹下所有文件*/
 9 
10     hFind = FindFirstFile(path, &FindFileData);
11     if (INVALID_HANDLE_VALUE == hFind)
12     {
13         std::cout << "FindFirstFile failed:" << GetLastError() << std::endl;
14         return;
15     }
16 
17 
18     do{
19         if (FindFileData.cFileName[0] == '.')
20             continue;
21 
22         if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
23         {
24             std::cout << "directory" << std::endl;
25             TCHAR subpath[1000];
26             lstrcpy(subpath, folder);
27             lstrcat(subpath, _T("\\"));
28             lstrcat(subpath, FindFileData.cFileName);
29             GetRawImagePath(subpath, image_path);
30         }
31         else
32         {
33             std::cout << "file" << std::endl;
34             TCHAR *path = new TCHAR[1000];
35             lstrcpy(path, folder);
36             lstrcat(path, _T("\\"));
37             lstrcat(path, FindFileData.cFileName);
38             image_path.push_back(path);
39         }
40 
41     } while (FindNextFile(hFind, &FindFileData));
42 
43     FindClose(hFind);
44 }
View Code

 

posted on 2016-02-29 17:46  tanfy  阅读(914)  评论(0编辑  收藏  举报

导航