В ходе программы проверяю существование директории, если она есть — удаляю, создаю такую же (то есть с таким же именем), и копирую в нее файлы из другой папки.
Вот в чем беда — иногда удаляет и копирует без проблем, но в определенный момент выдает ошибку "Не удается удалить файл. Не удается произвести чтение из файла..." и т.д.
В коде ни чего не меняю.
Почему может вываливать такая ошибка?
Вот код:
Удаление:
bool IsDirExists(char *checkDir)
{ //проверяем существование директории через возврат ошибки на создание файла в данной дериктории
HANDLE Handle = CreateFile(checkDir,
0,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
INVALID_HANDLE_VALUE);
if(Handle == INVALID_HANDLE_VALUE)
return false;
CloseHandle(Handle);
return true;
}
//---------------------------------------------------------------------------
bool DelDir(char *iDie)
{
if (IsDirExists(iDie)) {
SHFILEOPSTRUCT fo;
ZeroMemory(&fo, sizeof(fo));
fo.pFrom = iDie;
fo.wFunc = FO_DELETE;
fo.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
if (SHFileOperationA(&fo) == 0)
{
return true;
} else return false;
}
}
Создание:
bool iCreateDir(char *iNewDir)
{
if (!IsDirExists(iNewDir))
{
CreateDirectoryA(iNewDir, NULL);
return true;
}
else return false;
}
Копирование в папку:
bool CopyFiles(char *iFrom)
{
SHFILEOPSTRUCT TEST;
//TEST.hwnd=0;
TEST.pFrom=iFrom;
TEST.pTo="C:\\New_Way";
TEST.wFunc=FO_COPY;
TEST.fFlags=FOF_NOCONFIRMATION;
if (SHFileOperationA(&TEST)!=0) return false;
else return true;
}
Ну и последовательность вызова:
DelDir("C:\\New_Way"); // - если директория существует - удаляем ее
if (iCreateDir("C:\\New_Way"))
{
if(CopyFiles("C:\\Way\\*.*")) //
{
MessageBox(NULL, "Copy", "Complete", 0);
}
}
Иногда просто не копирует.
Подскажите че-нить.
(сразу скажу — не предлагайте функции, работающие через AnsiString)