Форум: "Начинающим";
Текущий архив: 2008.08.31;
Скачать: [xml.tar.bz2];
ВнизПодскажите как удалить папку Найти похожие ветки
← →
Loginov Dmitry © (2008-07-23 22:07) [40]> покритикуйте код, плиз. Только по теме, что можно улучшить,
> исправить.
1) Нет анализа результата функции FindFirst(). Если поиск (вдруг) не начался, то и FindClose() вызывать не следует.
2) Зачем два цикла поиска? Что, одним нельзя обойтись?
3) Функция не удаляет указанную папку. Автор обидется :)
3) Если уж критиковать по полной ;) В чем информативность дополнительных 4х переменный. Можно, чтобы функция возвращала результат, удалось ли удалить содержимое из указанной папки или нет. Еще: каждый раз объявлять 4 переменные - замучаешься. Лучше параметры вместо var сделать PInteger и внутри функции проверять на Assigned().
← →
Johnmen © (2008-07-23 22:17) [41]
> Johnmen © (23.07.08 17:53) [10]
> > sniknik © (23.07.08 17:50) [9]
> > ...то поможет GetLastError/SysErrorMessage
> > или RaiseLastOSError, Win32Check.
> Ты большой оптимист :)
Большой оптимист в отношении аффтара.
← →
{RASkov} © (2008-07-23 22:43) [42]> [39] Denis__ © (23.07.08 20:20)
Гы.... делать было нечего и вот тоже "набросал":type
TDelDirResult = record
DelFilesCount, DelDirsCount,
NoDelFilesCount, NoDelDirsCount: Integer;
end;
function DelDir(const PathDel: String): TDelDirResult; overload;
procedure DirDelete(ADir: String; var DDR: TDelDirResult);
var SR: TSearchRec;
begin
ADir :=IncludeTrailingPathDelimiter(ADir);
if FindFirst(ADir + "*.*", faAnyFile, SR)=0 then
try
repeat
if (SR.Name = ".") or (SR.Name = "..") then Continue;
if (SR.Attr and faDirectory = faDirectory) then begin
DirDelete(ADir + SR.Name, DDR);
end else
if DeleteFile(ADir + "\" + SR.Name) then
Inc(DDR.DelFilesCount) else Inc(DDR.NoDelFilesCount);
until FindNext(SR) <> 0;
finally
FindClose(SR);
try
RmDir(ADir);
Inc(DDR.DelDirsCount);
except
Inc(DDR.NoDelDirsCount);
end;
end;
end;
begin
with Result do begin
DelFilesCount:=0;
DelDirsCount:=0;
NoDelFilesCount:=0;
NoDelDirsCount:=0;
end;
DirDelete(PathDel, Result);
end;
function DelDirBool(const PathDel: String): Boolean; overload;
var DDR: TDelDirResult;
begin
DDR:=DelDir(PathDel);
Result:=(DDR.NoDelFilesCount=0) and (DDR.NoDelDirsCount=0) and (DDR.DelDirsCount>0);
end;
// Вызов
procedure TForm1.Button1Click(Sender: TObject);
begin
with DelDir("C:\Temp\123") do
ShowMessage(Format("Удалено %d файлов, %d - директорий"#13#10"Пропущено: %d - файлов, %d - директорий"
, [DelFilesCount, DelDirsCount, NoDelFilesCount, NoDelDirsCount]));
//или
//if DelDirBool("C:\Temp\123") then ShowMessage("Успех") else ShowMessage("Провал");
end;
:)
← →
{RASkov} © (2008-07-23 22:45) [43]overload"ы только не нужно... т.е. их нужно убрать :)
Хотел было сделать перегруженную, но параметр один, а результат не является разницей.... в общем ...нужно убрать оверлоад :)
← →
No_Dead © (2008-07-23 23:02) [44]сорри, за оффтоп
вот каков смысл этого всего(ветки на 43+1 поста)?
5 секунд потратил что бы в гугл забить запрос, и 2 сек что бы скопипастить...
вот кто сможет объяснить такое явление как «анти-гугл»?
ЗЫ. не первый раз вижу подобное, и просто дико интересно почему так...
← →
Renegat © (2008-07-23 23:03) [45]Гы... у меня где-то валялась функция удаления папок через прерывание 21h...
Если найду - выложу непременно, раз уж такая пьянка пошла %)
А вообще - юзайте DELTREE %)
← →
{RASkov} © (2008-07-23 23:27) [46]> [45] Renegat © (23.07.08 23:03)
> Если найду - выложу непременно
Не нужно. No_Dead ругаться будет :) шутка)
ЗЫЖ А я вот на основании
> 3) Функция не удаляет указанную папку. Автор обидется :)
добавил дополнительный параметр в первую DelDir(теперь они перегруженные)
Во как:function DelDir(const PathDel: String; IsOnlyClearDir: Boolean): TDelDirResult; overload;
function DelDir(const PathDel: String): Boolean; overload;
Например, с IsOnlyClearDir=True удобно папку темп чистить :))
ЗЫЖЖ Эх... пойду-ка я лучше спать)
← →
Германн © (2008-07-24 01:52) [47]
> {RASkov} © (23.07.08 23:27) [46]
>
> > [45] Renegat © (23.07.08 23:03)
> > Если найду - выложу непременно
>
> Не нужно. No_Dead ругаться будет :) шутка)
>
> ЗЫЖ А я вот на основании
>
> > 3) Функция не удаляет указанную папку. Автор обидется
> :)
>
> добавил дополнительный параметр в первую DelDir(теперь они
> перегруженные)
> Во как:
> function DelDir(const PathDel: String; IsOnlyClearDir:
> Boolean): TDelDirResult; overload;
> function DelDir(const PathDel: String): Boolean; overload;
>
> Например, с IsOnlyClearDir=True удобно папку темп чистить
> :))
>
>
DelDir <> ClearDir!
Нафига делать перегрузку, если перегружаемая функция делает нечто другое "по сути"?
← →
Vad © (2008-07-24 06:56) [48]Читаем справку по RxLib
Unit
FileUtil
Declaration
function ClearDir(const Path: string; Delete: Boolean): Boolean;
Description
Функция удаляет все файлы из каталога Path и его подкаталогов. Если параметр Delete имеет значение True, то функция также удаляет сам каталог,
заданный параметром Path и все его подкаталоги. При удалении файлов игнорируется аттрибут Read-Only. При успешном завершении функция возвращает
значение True, в противном случае - False.
Все в этом мире уже когда-то было и новое придумать сложно... )))
← →
Denis__ © (2008-07-24 10:35) [49]
> 1) Нет анализа результата функции FindFirst(). Если поиск
> (вдруг) не начался, то и FindClose() вызывать не следует.
>
> 2) Зачем два цикла поиска? Что, одним нельзя обойтись?
> 3) Функция не удаляет указанную папку. Автор обидется :)
> 3) Если уж критиковать по полной ;) В чем информативность
> дополнительных 4х переменный. Можно, чтобы функция возвращала
> результат, удалось ли удалить содержимое из указанной папки
> или нет. Еще: каждый раз объявлять 4 переменные - замучаешься.
> Лучше параметры вместо var сделать PInteger и внутри функции
> проверять на Assigned().
1) Да. Не подумал.
2) Зачем-то мне это было нужно %) Не помню, какая тогда была логика. Вроде того, что сначала добраться до конечной папки(в которой нет вложенных) а потом уже начинать удалять файлы.
3)Да там только одну строчку добавить:) и действительно, делал сначала DelFolder, а получилось ClearFolder.
4)Да, у {RASkov} © [42] это сделано лучше. Да и переменные это так - блаж была, чтоб статистику выдавать - столько удалено, столько - нет.
И всё?! А обычно сразу такой поток негативной критики. Неужели я начал писать хоть немного правильный код?
← →
Anatoly Podgoretsky © (2008-07-24 11:32) [50]
> Неужели я начал писать хоть немного правильный код?
Прогресс есть.
← →
{RASkov} © (2008-07-24 11:35) [51]> [47] Германн © (24.07.08 01:52)
> DelDir <> ClearDir!
> Нафига делать перегрузку, если перегружаемая функция делает
> нечто другое "по сути"?
Да, согласен. Чего-то я тут перемудрил вчера.... да еще в соседней ветке, GLScene попутал с GExperts :( Бывает...
← →
Игорь Шевченко © (2008-07-24 11:41) [52]Медвежонок Пятачок ©
Тын-Дын ©
Renegat ©
Для разборок на сайте придуман чат, в крайнем случае конференция "Прочее" по адресу
http://dev2.delphimaster.ru/forum/other/
← →
Медвежонок Пятачок © (2008-07-24 11:42) [53]Удалено модератором
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.31;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.008 c