![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удалить файлы с одним расширением [D7, WinXP]
tigra © (2006-05-03 13:07:00)Привет еще раз!
Тема такая - надо из каталога удалить все файлы с одним расширением, например *.doc средствами Delphi.
Может кто встречался, подскажите.
Заранее пасиба.
Anatoly Podgoretsky (2006-05-04 15:44:00) [1]ЮЮ © (04.05.06 12:08) [17]
Не видишь?, а например AV или другая критическая ошибка при удаление файла не будет сделан завершающий FindClose. Про обычные ошибки конечно речи нет. Надо все таки защищать ресурсы, а не гадать. Кроме того данный код зависит от версии Дельфи, например в Д3 будет ошибка времени исполнения если FindFirst не найдет ни одной записи.
Зачем гадать с окном, надо просто защитить ресурсы и проверить резултат функции
Loginov Dmitry (2006-05-04 12:26:00) [2]Сорри! Забыл :(
ЮЮ (2006-05-04 12:08:00) [3]
> Точно! try ... except ... end не помешал бы.
>
DeleteFile deletes the file named by FileName from the disk. If the file cannot be deleted or does not exist, the function returns False.
Согласно описания она безо всяких ошибок должна возвращать False при неуспешном удалении. Другое дело, правильно ли будет работать FindFirst, если SearchRecord ссылается на уже несуществующий файл. Но это всё зарыто в недрах Винды, ИМХО, поэтому, в отличии от Anatoly Podgoretsky я не вижу здесь никаих камней, а видящие немногословны :)
Loginov Dmitry (2006-05-04 12:00:00) [4]
> Опасный код.
Точно! try ... except ... end не помешал бы.
Anatoly Podgoretsky (2006-05-04 11:35:00) [5]Это некрасиво и неправильно. Опасный код.
tigra (2006-05-04 11:23:00) [6]Тут я, пожалуй, соглашусь, что и красиво и правильно.
Kair+ (2006-05-04 11:01:00) [7]Правильней будет так:
if FindFirst('C:\*.doc', faAnyFile, rs) = 0 then
begin
repeat
DeleteFile('C:\' + rs.Name);
until FindNext(rs) <> 0;
FindClose(rs);
end;
tigra (2006-05-04 08:18:00) [8]Я может чего не догоняю, объясните зачем такие заморочки со StringList'ом ? Ведь проще просто зная, что в папке ничего больше нет, кроме файлов с одним расширением, находя каждый следующий удалять, пока все не удалятся.
По мне так красивше 4 строки кода нежели 12.
Palladin (2006-05-03 15:23:00) [9]да, действительно... просто передалал его код как красивше не задумываясь... надо самоубица за такие дела...
While FindFirst('C:\*.doc',faAnyFile,rs)=0 Do
Begin
DeleteFile('C:\'+rs.Name);
FindClose(sr);
End;
что уже не красиво с точки зрения исполнения
Var
theFiles:TStringList;
sr:TSearchRec;
i:Integer;
Begin
theFiles:=TStringList.Create;
If FindFirst('c:\*.doc',faAnyFile,rs)=0 Then
Try
Repeat
theFiles.Add(rs.Name);
Until FindNext(sr)<>0;
For i:=0 to theFiles.Count-1 Do DeleteFile('c:\'+theFiles[i]);
Finally
FindClose(sr);
theFiles.Free;
End;
End;
begin...end (2006-05-03 14:19:00) [10]> Palladin © (03.05.06 14:04) [9]
Цикл никогда не закончится. И будет постоянно увеличивать количество открытых дескрипторов.
Palladin (2006-05-03 14:04:00) [11]Если уж на то пошло, то
While FindFirst('C:\*.doc',faAnyFile,rs)=0 Do DeleteFile('C:\'+rs.Name);
Virgo_Style (2006-05-03 13:38:00) [12]насчет красиво - вряд ли... все же лучше бы по "справочному" примеру
tigra (2006-05-03 13:35:00) [13]Агромное спасибо - все красиво получилось :)
repeat
if FindFirst('C:\*.doc',faAnyFile,rs)=0 then
deleteFile('C:\'+rs.Name);
until FindNext(rs)<>0;
begin...end (2006-05-03 13:35:00) [14]SHFileOperation
Desdechado (2006-05-03 13:28:00) [15]на что нужно внимательно прочитать справку по типу TsearchRec
tigra (2006-05-03 13:27:00) [16]Incompatible Types String and TSearchRec...
tigra (2006-05-03 13:25:00) [17]Пишу такую проверку
if FindFirst('C:\Program Files\Dok\Send\*.doc',faAnyFile,rs)=0 then
deleteFile(rs);
На что выдается ошибка
Desdechado (2006-05-03 13:14:00) [18]winexec + cmd.exe + del *.doc + справка по всему этому
Darvin (2006-05-03 13:09:00) [19]FindFirst, FindNext.