为什么这种删除文件夹中文件的方法不起作用?

时间:2012-09-17 15:10:45

标签: c++ winapi directory delete-file

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 ++删除所有文件。它里面没有任何文件夹。这有多难?

3 个答案:

答案 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 
}