我正在尝试以编程方式查找目录中的文件列表,并且我编写了以下代码
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 始终包含“.”。“。” 对于第一个文件,“..”对于第二个文件,依此类推。这段代码有什么问题?提前致谢。
您的代码仅使用 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)