zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Qt实现模糊搜索
    Qt解析多级xml文件
    insert into
    Git忽略规则(.gitignore配置)不生效原因和解决
    搭建vue开发环境
    表单
    事件处理
    列表渲染
    条件渲染
    class与style绑定
  • 原文地址:https://www.cnblogs.com/tanfy/p/5228281.html
Copyright © 2011-2022 走看看