Копирование и удаление файлов
От: irbis3003  
Дата: 01.10.10 06:21
Оценка:
В ходе программы проверяю существование директории, если она есть — удаляю, создаю такую же (то есть с таким же именем), и копирую в нее файлы из другой папки.
Вот в чем беда — иногда удаляет и копирует без проблем, но в определенный момент выдает ошибку "Не удается удалить файл. Не удается произвести чтение из файла..." и т.д.
В коде ни чего не меняю.
Почему может вываливать такая ошибка?

Вот код:

Удаление:
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)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.