Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизКак грамотно стиреть директорию ? Найти похожие ветки
← →
JohnKorsh (2005-02-09 08:48) [0]Не поможете ли с таким вопросом: Я очистил директорию стандартными методами (FindFirst, Erase, потом FindNext, Erase в цикле) но после этого сама директория не стирается, хотя и пустая. (RmDir) (После очистки текущую директорию я сменил). При отладке пишется ошибка I/O 32, но в Help I/O ошибки начинаются с N 105.
При повторном запуске программы эта директория успешно стирается.
Может от последнего FindNext остается кака-то I/O ошибка, так как бы ее удалить ?
← →
КаПиБаРа © (2005-02-09 08:52) [1]Код приведи
← →
begin...end © (2005-02-09 09:07) [2]> JohnKorsh (09.02.05 8:48)
Можно ещё воспользоваться API-функцией SHFileOperation. Тогда каталог даже не придётся очищать перед удалением.
← →
Fay © (2005-02-09 09:26) [3]2 JohnKorsh (09.02.05 08:48)
Какие-то ошибки неоходимо исправлять каким-то способом.
Запиши, чтобы не забыть.
← →
JohnKorsh (2005-02-09 10:16) [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;
← →
Плохиш © (2005-02-09 10:20) [5]FindClose где?
← →
begin...end © (2005-02-09 10:26) [6]> JohnKorsh (09.02.05 10:16) [4]
Во-первых, вот это:
> AssignFile(F, Search.Name);
> Erase (F)
можно заменить на DeleteFile.
Во-вторых, в очищаемой папке не может быть подкаталогов? Если они там всё же могут быть, то следует добавить рекурсивное удаление в подпапках.
В-третьих, см. [5].
В-четвёртых, чем всё-таки так не нравится SHFileOperation?
← →
JohnKorsh (2005-02-09 10:34) [7]Спасибо, помогло. (FindClose, а SHFileOperation еще лучше)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c