Почему этот метод удаления файлов внутри папки не работает?

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

Решение

Во-вторых, по данным MSDN о FindFirstFile функция:

«Ищет в каталоге файл или подкаталог с именем, которое
соответствует определенному имени (или частичному имени, если используются подстановочные знаки). «

Я не вижу подстановочный знак в вашей входной строке, поэтому я могу только догадываться, что FindFirstFile будет искать файлы с именем "folder" в текущем каталоге выполнения.

Попробуйте искать "folder\\*",

2

Другие решения

2 проблемы, которые я вижу:

1) Я бы придерживался только широких струн, если это то, что вам нужно. Попробуйте позвонить Удалить файл вместо этого (при условии, что ваш проект — UNICODE), который вы можете передать широкой строкой.

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
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector