Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

Как от личить файл от папки при FindFirst   Найти похожие ветки 

 
TStas ©   (2006-02-20 07:50) [0]

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


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

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


 
TStas ©   (2006-02-20 23:09) [2]

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


 
Zeqfreed ©   (2006-02-20 23:12) [3]

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


 
TStas ©   (2006-02-24 23:39) [4]

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. С чем это связано - ума не приложу, видимо, нечего прикладывать


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

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

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


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

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


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

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

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


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

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

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


 
Grief ©   (2006-02-25 01:45) [9]

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


 
Джо ©   (2006-02-25 01:47) [10]

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

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


 
novice_man ©   (2006-02-25 05:31) [11]

Что до ошибки возникаюей при выполнении 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 сменить текущий каталог (можно попытаться проверить какой каталог текущий и если удаляемый, сменить).


 
TStas ©   (2006-02-25 20:16) [12]

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


 
Джо ©   (2006-02-25 20:25) [13]

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

ChDir.


 
TStas ©   (2006-02-28 23:41) [14]

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


 
Джо ©   (2006-02-28 23:44) [15]

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

Так и думал :)



Страницы: 1 вся ветка

Текущий архив: 2006.03.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.041 c
2-1141316644
Vitalik__
2006-03-02 19:24
2006.03.19
замена StringGrid а


1-1139914089
Азазелло
2006-02-14 13:48
2006.03.19
вопрос по TWordDocument...


2-1141584780
xroot
2006-03-05 21:53
2006.03.19
Отвалился дебаггер


2-1141127012
antoxa2005
2006-02-28 14:43
2006.03.19
ПОМОГИТЕ ! Как так Class TEdit not found ?


5-1127302633
RDS
2005-09-21 15:37
2006.03.19
Access violation in design time