![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как грамотно стиреть директорию ? [D5, Win95/98, WinXP]
JohnKorsh © (2005-02-09 08:48:00)Не поможете ли с таким вопросом: Я очистил директорию стандартными методами (FindFirst, Erase, потом FindNext, Erase в цикле) но после этого сама директория не стирается, хотя и пустая. (RmDir) (После очистки текущую директорию я сменил). При отладке пишется ошибка I/O 32, но в Help I/O ошибки начинаются с N 105.
При повторном запуске программы эта директория успешно стирается.
Может от последнего FindNext остается кака-то I/O ошибка, так как бы ее удалить ?
JohnKorsh (2005-02-09 10:34:00) [1]Спасибо, помогло. (FindClose, а SHFileOperation еще лучше)
begin...end (2005-02-09 10:26:00) [2]> JohnKorsh (09.02.05 10:16) [4]
Во-первых, вот это:
> AssignFile(F, Search.Name);
> Erase (F)
можно заменить на DeleteFile.
Во-вторых, в очищаемой папке не может быть подкаталогов? Если они там всё же могут быть, то следует добавить рекурсивное удаление в подпапках.
В-третьих, см. [5].
В-четвёртых, чем всё-таки так не нравится SHFileOperation?
Плохиш (2005-02-09 10:20:00) [3]FindClose где?
JohnKorsh (2005-02-09 10:16:00) [4]Извините, текст длинноват, но вот он:
My_Doc_Dir := ShellDir ('Personal');
// Ищу My Documents на данном компьютере.
if My_Doc_Dir = '' then My_Doc_Dir := 'C:\';
ChDir (My_Doc_Dir);
// Перехожу в My Documents.
if DirectoryExists (My_Doc_Dir + Init_Dir) then
// Смотрю есть ли моя директория и перехожу в неё.
begin
ChDir (My_Doc_Dir + '\' + Init_Dir);
// Всё чищу в директории.
if FindFirst (My_Doc_Dir + Init_Dir + '\*.*',
faAnyFile, Search) = 0 then
begin
if ((Search.Name <> '.') and (Search.Name<> '..')) then
begin
FileSetAttr (Search.Name, $20);
AssignFile(F, Search.Name);
Erase (F);
end;
end;
While FindNext (Search) = 0 do
begin
if ((Search.Name <> '.') and (Search.Name <> '..')) then
begin
FileSetAttr (Search.Name, $20);
AssignFile(F, Search.Name);
Erase (F);
end;
end;
end;
ChDir (My_Doc_Dir); // Перехожу в My Documents.
if DirectoryExists (Init_Dir) then
begin
try
RmDir (Init_Dir);
// Вот здесь при отладке возникает IO 32.
except
end;
end;
end;
Fay (2005-02-09 09:26:00) [5]2 JohnKorsh (09.02.05 08:48)
Какие-то ошибки неоходимо исправлять каким-то способом.
Запиши, чтобы не забыть.
begin...end (2005-02-09 09:07:00) [6]> JohnKorsh (09.02.05 8:48)
Можно ещё воспользоваться API-функцией SHFileOperation. Тогда каталог даже не придётся очищать перед удалением.
КаПиБаРа (2005-02-09 08:52:00) [7]Код приведи