Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Вниз

Удалить файлы с одним расширением   Найти похожие ветки 

 
tigra   (2006-05-03 13:07) [0]

Привет еще раз!
Тема такая - надо из каталога удалить все файлы с одним расширением, например *.doc средствами Delphi.
Может кто встречался, подскажите.
Заранее пасиба.


 
Darvin ©   (2006-05-03 13:09) [1]

FindFirst, FindNext.


 
Desdechado ©   (2006-05-03 13:14) [2]

winexec + cmd.exe + del *.doc + справка по всему этому


 
tigra   (2006-05-03 13:25) [3]

Пишу такую проверку
if FindFirst("C:\Program Files\Dok\Send\*.doc",faAnyFile,rs)=0 then
                 deleteFile(rs);
На что выдается ошибка


 
tigra   (2006-05-03 13:27) [4]

Incompatible Types String and TSearchRec...


 
Desdechado ©   (2006-05-03 13:28) [5]

на что нужно внимательно прочитать справку по типу TsearchRec


 
begin...end ©   (2006-05-03 13:35) [6]

SHFileOperation


 
tigra   (2006-05-03 13:35) [7]

Агромное спасибо - все красиво получилось :)
repeat
 if FindFirst("C:\*.doc",faAnyFile,rs)=0 then
    deleteFile("C:\"+rs.Name);
until FindNext(rs)<>0;


 
Virgo_Style ©   (2006-05-03 13:38) [8]

насчет красиво - вряд ли... все же лучше бы по "справочному" примеру


 
Palladin ©   (2006-05-03 14:04) [9]

Если уж на то пошло, то

While FindFirst("C:\*.doc",faAnyFile,rs)=0 Do DeleteFile("C:\"+rs.Name);


 
begin...end ©   (2006-05-03 14:19) [10]

> Palladin ©   (03.05.06 14:04) [9]

Цикл никогда не закончится. И будет постоянно увеличивать количество открытых дескрипторов.


 
Palladin ©   (2006-05-03 15:23) [11]

да, действительно... просто передалал его код как красивше не задумываясь... надо самоубица за такие дела...

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;


 
tigra   (2006-05-04 08:18) [12]

Я может чего не догоняю, объясните зачем такие заморочки со StringList"ом ? Ведь проще просто зная, что в папке ничего больше нет, кроме файлов с одним расширением, находя каждый следующий удалять, пока все не удалятся.
По мне так красивше 4 строки кода нежели 12.


 
Kair+ ©   (2006-05-04 11:01) [13]

Правильней будет так:


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 11:23) [14]

Тут я, пожалуй, соглашусь, что и красиво и правильно.


 
Anatoly Podgoretsky ©   (2006-05-04 11:35) [15]

Это некрасиво и неправильно. Опасный код.


 
Loginov Dmitry ©   (2006-05-04 12:00) [16]


> Опасный код.


Точно! try ... except ... end не помешал бы.


 
ЮЮ ©   (2006-05-04 12:08) [17]


> Точно! 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:26) [18]

Сорри! Забыл :(


 
Anatoly Podgoretsky ©   (2006-05-04 15:44) [19]

ЮЮ ©   (04.05.06 12:08) [17]
Не видишь?, а например AV или другая критическая ошибка при удаление файла не будет сделан завершающий FindClose. Про обычные ошибки конечно речи нет. Надо все таки защищать ресурсы, а не гадать. Кроме того данный код зависит от версии Дельфи, например в Д3 будет ошибка времени исполнения если FindFirst не найдет ни одной записи.

Зачем гадать с окном, надо просто защитить ресурсы и проверить резултат функции



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.013 c
15-1145959777
Yuri Btr
2006-04-25 14:09
2006.05.21
Прочитать RTF формат


4-1141220323
ionn
2006-03-01 16:38
2006.05.21
Как отследить момент закрытия внешнего приложения?


3-1143716463
wsm-100
2006-03-30 15:01
2006.05.21
Как получить список имен БД на сервере MSSQL


8-1134657965
seleman
2005-12-15 17:46
2006.05.21
Вопрос по видео


2-1146332817
Express
2006-04-29 21:46
2006.05.21
ADOCommand – как перейти на следующую запись???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский