std::wstring inxmpath ( L"folder" );
HANDLE hFind;
BOOL bContinue = TRUE;
WIN32_FIND_DATA data;
hFind = FindFirstFile(inxmpath.c_str(), &data);
// If we have no error, loop through the files in this dir
int counter = 0;
while (hFind && bContinue) {
std::wstring filename(data.cFileName);
std::string fullpath = "folder/";
fullpath += (const char* )filename.c_str();
if(remove(fullpath.c_str())!=0) return error;
bContinue = FindNextFile(hFind, &data);
counter++;
}
FindClose(hFind); // Free the dir
我不明白为什么它不起作用,我认为它与wstring和string之间的转换有关,但是我不确定。我有一个文件夹,其中包含一些.txt文件,我需要使用C ++删除所有文件。它里面没有任何文件夹。这有多难?
答案 0 :(得分:2)
其次,根据MSDN关于FindFirstFile
函数:
“在目录中搜索名称为的文件或子目录 匹配特定名称(如果使用通配符,则为部分名称)。“
我在输入字符串中看不到通配符,所以我只能猜测FindFirstFile
会在当前执行目录中查找名为"folder"
的文件。
尝试寻找"folder\\*"
。
答案 1 :(得分:0)
我可以看到2个问题:
1)如果那就是你需要的,我只会坚持使用宽字符串。请尝试调用DeleteFile(假设您的项目是UNICODE),您可以传递一个宽字符串。
2)您正在使用相对路径,其中绝对路径会更强大。
答案 2 :(得分:0)
请改为尝试:
std::wstring inxmpath = L"c:\\path to\\folder\\";
std::wstring fullpath = inxmpath + L"*.*";
WIN32_FIND_DATA data;
HANDLE hFind = FindFirstFileW(fullpath.c_str(), &data);
if (hFind != INVALID_HANDLE_VALUE)
{
// If we have no error, loop through the files in this dir
BOOL bContinue = TRUE;
int counter = 0;
do
{
if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
{
fullpath = inxmpath + data.cFileName;
if (!DeleteFileW(fullpath.c_str()))
{
FindClose(hFind);
return error;
}
++counter;
bContinue = FindNextFile(hFind, &data);
}
}
while (bContinue);
FindClose(hFind); // Free the dir
}