以编程方式查找目录中的文件列表 C++ MFC

Ela*_*ana 2 c++ winapi mfc

我正在尝试以编程方式查找目录中的文件列表,并且我编写了以下代码

CStringArray CCL2ProjectDirectoryPage::GetAllFilesNames()
{
  WIN32_FIND_DATA fileData;
  memset(&fileData, 0, sizeof(WIN32_FIND_DATA));
  HANDLE handle = FindFirstFile("d:\\test\\*", &fileData);

  CStringArray strArray;

  while(handle != INVALID_HANDLE_VALUE)
  {
    strArray.Add(fileData.cFileName); // the problem is that the fileData.cFileName always contains "."

    if(FALSE == FindNextFile(handle, &fileData))
    break;
  }
  FindClose(handle);

  return strArray;
}
Run Code Online (Sandbox Code Playgroud)

问题是 fileData.cFileName 始终包含“.”。“。” 对于第一个文件,“..”对于第二个文件,依此类推。这段代码有什么问题?提前致谢。

And*_*gin 5

您的代码仅使用 Win32 API 来遍历目录/文件夹。MFC 的方法要简单得多。自带的框架CFileFind更容易使用。您也不能返回,CStringArray因为它没有复制构造函数。您应该使用CStringArray引用作为方法的输出参数

void CCL2ProjectDirectoryPage::GetAllFilesNames(CStringArray& files)
{
    CFileFind finder;
    // start working for files
    BOOL bWorking = finder.FindFile(_T("d:\\test\\*"));
    while (bWorking)
    {
        bWorking = finder.FindNextFile();

        // skip . and .. files
        if (!finder.IsDots())
        {
            files.Add(finder.GetFileName());
        }
    }

}
Run Code Online (Sandbox Code Playgroud)