背景:
我目前正在VC ++ 6上的旧版应用程序上工作。 我正在尝试创建一个函数来遍历目录中的所有文件并获取其所有文件路径。
在我自己的计算机上,我使用了Visual Studio2017,并且以下代码有效。但是,当我在VC ++ 6上实现它时,它就会失败。
当我尝试编译时,主要显示两种错误类型
error C2664: 'FindFirstFileA' : cannot convert parameter 1 from 'const unsigned short *' to 'const char *'
error C2782: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const _E)' : template parameter '_E' is ambiguous
could be 'char *'
任何想法都将不胜感激。谢谢
C ++代码
#include <windows.h>
#include <string>
#include <vector>
#include <stack>
#include <iostream>
using namespace std;
bool ListFiles(wstring path, wstring mask, vector<wstring>& files) {
HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATA ffd;
wstring spec;
stack<wstring> directories;
directories.push(path);
files.clear();
while (!directories.empty()) {
path = directories.top();
spec = path + L"\\" + mask;
directories.pop();
hFind = FindFirstFile(spec.c_str(), &ffd);
if (hFind == INVALID_HANDLE_VALUE) {
return false;
}
do {
if (wcscmp(ffd.cFileName, L".") != 0 &&
wcscmp(ffd.cFileName, L"..") != 0) {
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
directories.push(path + L"\\" + ffd.cFileName);
}
else {
files.push_back(path + L"\\" + ffd.cFileName);
}
}
} while (FindNextFile(hFind, &ffd) != 0);
if (GetLastError() != ERROR_NO_MORE_FILES) {
FindClose(hFind);
return false;
}
FindClose(hFind);
hFind = INVALID_HANDLE_VALUE;
}
return true;
}
int main(int argc, char* argv[])
{
vector<wstring> files;
if (ListFiles(L"D:\\test", L"*", files)) {
for (vector<wstring>::iterator it = files.begin ();
it != files.end();
++it) {
wcout << it->c_str() << endl;
}
}
return 0;
}