C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
DeleteFile
Kuks
Отправлено: 23.06.2006, 10:49


Станционный диспетчер

Группа: Участник
Сообщений: 108



CODE
DeleteFile("*.*");
Не работает! Почему?
seg_r
Отправлено: 23.06.2006, 11:37


Дежурный стрелочник

Группа: Участник
Сообщений: 74



по-моему делетефайлу надо точно знать, что удалаять...

а если все удалять, то через FindFirst, FindNext

З.Ы. ещеб путь указать было бы не плохо, иначе он сотрет че-нить не в той папке, в которой нужно...
Kuks
Отправлено: 23.06.2006, 12:24


Станционный диспетчер

Группа: Участник
Сообщений: 108



Щас попробую!
Kuks
Отправлено: 23.06.2006, 13:48


Станционный диспетчер

Группа: Участник
Сообщений: 108



Покопался с архиве форума, нашел и сделал так:
CODE
    AnsiString CurrDir = GetCurrentDir();
TSearchRec sr;
if (FindFirst(CurrDir + "\*.*",faAnyFile,sr) == 0)
 while(FindNext(sr) == 0)
  DeleteFile(sr.Name);
FindClose(sr);
SetCurrentDir(AppDir);
RemoveDir("Temp");
Gedeon
Отправлено: 23.06.2006, 14:08


Ветеран

Группа: Модератор
Сообщений: 1742



CODE

//----------------------------------------------------------------------------
bool __stdcall OdLib::DeleteDir(char *Path)
{
    //строка пути должна заканчиваться
    //двумя нулями, что и делается т.е.
    //добавляется еще 1 '\0'
   char *IPath;                            //строка пути должна заканчиваться
   IPath = (char*)malloc(lstrlen(Path)+2); //двумя нулями, что и делается в
   strcpy(IPath,Path);                     //первых четырех строках т.е.
   IPath[lstrlen(IPath)+1]='\0';           //добавляется еще 1 '\0'

   SHFILEOPSTRUCT strFileOp;               //заполняем параметры структуры
   strFileOp.hwnd = NULL;
   strFileOp.wFunc = FO_DELETE;
   strFileOp.pFrom = IPath;
   strFileOp.pTo = NULL;

  strFileOp.fFlags = FOF_NOCONFIRMATION;

   if(!SHFileOperation(&strFileOp)) return false;

   free(IPath);
   return true;

}
viva
Отправлено: 23.06.2006, 15:21


Дежурный стрелочник

Группа: Участник
Сообщений: 31



QUOTE (Kuks @ 23/06/2006, 13:48)
Покопался с архиве форума, нашел и сделал так:
CODE
AnsiString CurrDir = GetCurrentDir();
TSearchRec sr;
if (FindFirst(CurrDir + "\*.*",faAnyFile,sr) == 0)
while(FindNext(sr) == 0)
DeleteFile(sr.Name);
FindClose(sr);
SetCurrentDir(AppDir);
RemoveDir("Temp");

FindFirst/FindNext возвращают и каталоги ".", ".."! Не уверен, что их удаление не приведёт к чему-нибудь нехорошему.(Правда сам не проверял). А вот GetCurrentDir использовать для каталога, файлы которого удаляются не рекомендую. Лучше это задавать как-то иначе.
Судя по последней строке требуется удалять каталог "Temp", так вот его и задавай.
И последнее: строку

CODE
if (FindFirst(CurrDir + "\*.*",faAnyFile,sr) == 0)

лучше писать как
CODE
if (FindFirst(IncludeTrailingPathDelimiter(CurrDir) + "*.*",faAnyFile,sr) == 0)

Вернуться в Вопросы программирования в C++Builder