Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как от личить файл от папки при FindFirst


TStas ©   (2006-02-20 07:50:00) 

Если нужно и то, и другое, колнечноая цель - все стьереть, то есть аналог DEleteFolder, просто не могу найти в каком модуле он живет, проже самому написать.


Джо   (2006-02-28 23:44:00) [1]

> [14] TStas ©   (28.02.06 23:41)
> Забыл спасибу написать. Каталог делался текущим

Так и думал :)


TStas   (2006-02-28 23:41:00) [2]

Забыл спасибу написать. Каталог делался текущим, т. к. я, пробуя его стирать, невольно показывал его, ну и...
Джо, как всегда - респект


Джо   (2006-02-25 20:25:00) [3]

> [12] TStas ©   (25.02.06 20:16)
> А вот как его сменить

ChDir.


TStas   (2006-02-25 20:16:00) [4]

>Попробуй перед выполнением RmDir сменить текущий каталог
А вот как его сменить? uses WinDos - не понимает, а что такое виндос, а именно в нем описана стандартная паскалевская функция смены каталога


novice_man   (2006-02-25 05:31:00) [5]

Что до ошибки возникаюей при выполнении RmDir, пример из справки:
uses Dialogs;
begin

  {$I-}
  { Get directory name from TEdit control }
  RmDir(Edit1.Text);
  if IOResult <> 0 then
    MessageDlg('Cannot remove directory', mtWarning, [mbOk], 0)
  else
    MessageDlg('Directory removed', mtInformation, [mbOk], 0);
end;

Попробуй перед выполнением RmDirсменить текущий каталог (можно попытаться проверить какой каталог текущий и если удаляемый, сменить).


Джо   (2006-02-25 01:47:00) [6]

> [9] Grief ©   (25.02.06 01:45)
> Можно извратнуться и поискать хэндл процесса, который занимает
> эту папку, убить его и вновь попытаться удалить ее.

Угу. За такое лучше убить кого-то другого... Даже смайлик не поставлю.


Grief   (2006-02-25 01:45:00) [7]

Можно извратнуться и поискать хэндл процесса, который занимает эту папку, убить его и вновь попытаться удалить ее.


Джо   (2006-02-25 00:37:00) [8]

> [7] Джо ©   (25.02.06 00:36)
> Ну, используй DeleteFile.

Тьфу, то есть RemoveDir.


Джо   (2006-02-25 00:36:00) [9]

> [6] TStas ©   (25.02.06 00:32)

Ну, используй DeleteFile. Она возвращает булевское значение, а исключений не возбуждает.


TStas   (2006-02-25 00:32:00) [10]

И чего сделать? Это ж рекурсия? Может в try засунуть. А не удалится - так судбба ее жить на Земле


Джо   (2006-02-25 00:13:00) [11]

> но при удалении ее возникает ошика 32.

Code: 32.
The process cannot access the file because it is being used by another process.
Для какого-то процесса, вероятно, эта папка является текущей. В XP и Win2K ты не сможешь удалить такую папку.


TStas   (2006-02-24 23:39:00) [12]

function ClearDir(const Path: string): Boolean;
var
SR: TSearchRec;
FilePath: String;
begin
//ShowMessage('Ïîëó÷åíî íà âõîäå '+Path);
Result := DirectoryExists(Path);
if not Result then Exit;

if FindFirst(path+'\*.*', faAnyFile, SR)=0 then
 repeat
 if (sr.Name'.') and (sr.Name'..') and
   (sr.Attr and faDirectory faDirectory) then
   begin
   FilePath:=Path+'\'+sr.Name;
     try
     DeleteFile(FilePath);
     except Result:=false; end;
   end;
 until FindNext(SR)0;

FindClose(sr);

if FindFirst(path+'\*.*', faDirectory, SR)=0 then
 repeat
   begin
   if (sr.Name='.') or (sr.Name='..') then continue;
   FilePath:=Path+'\'+sr.Name;
   ClearDir(FilePath);
   end
 until FindNext(SR)0;

FindClose(sr);
rmDir(Path);
end;

Получился вполне рабочи код. Одно плохо - стирает все, вычищает саму папку, но при удалении ее возникает ошика 32. С чем это связано - ума не приложу, видимо, нечего прикладывать


Zeqfreed   (2006-02-20 23:12:00) [13]

if (sr.Attr and faDirectory = faDirectory) then ;


TStas   (2006-02-20 23:09:00) [14]

SR.Attr=FaDirectory//ошибка потому и спросил


AbrosimovA   (2006-02-20 08:16:00) [15]

faDirectory - директория


Наверх

Титульная страница Поиск, карта сайта Написать письмо