繁体   English   中英

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

[英]find list of files in a directory programmatically C++ 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;
}

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

你要这个:

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

  if (handle != INVALID_HANDLE_VALUE)
  {
    do
    {
      if (_tcscmp(fileData.cFileName, _T(".")) != 0 && // ignore "." and ".."
        _tcscmp(fileData.cFileName, _T("..")) != 0)
      {
        strArray.Add(fileData.cFileName);
      }
    } while (FindNextFile(handle, &fileData));

    FindClose(handle);
  }

  return strArray;
}

免责声明:这是未经测试的,并且最小的错误检查代码仅用于演示目的。

您的代码仅使用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());
        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM