![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как от личить файл от папки при 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 - директория