[英]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.