Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

Как от личить файл от папки при 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.014 c
8-1129292374
Creep1
2005-10-14 16:19
2006.03.19
компонент MediaPlayer


3-1138094464
~SerJant~
2006-01-24 12:21
2006.03.19
FIBVirtualStringTree


15-1140972179
Fl@sh
2006-02-26 19:42
2006.03.19
Materboard i810 driver


3-1138109339
Tornado
2006-01-24 16:28
2006.03.19
MS SQL Server Connect


2-1141133176
sanich
2006-02-28 16:26
2006.03.19
Поставить курсор в таблице на определенное поле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский