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

Вниз

Как по всему диску C: удалить файлы с расширением *.tmp ???   Найти похожие ветки 

 
rolex   (2003-11-07 22:16) [0]

Как по всему диску C:\ удалить файлы с расширением *.tmp ???


 
Anatoly Podgoretsky   (2003-11-07 22:31) [1]

ShFileOperation


 
rolex   (2003-11-07 22:40) [2]

А можно полный пример??? Пожалуйста!


 
Prof   (2003-11-08 12:15) [3]

Удалено модератором


 
Anatoly Podgoretsky   (2003-11-08 13:32) [4]

Приметы есть в Чаво, в нем есть поиск, будут конкретные вопросы приходи, я бы лично не рискнул давать пример, помню что было в разных конференциях после этого, так что бери сам готовые и доводи.


 
RoLeX   (2003-11-08 17:57) [5]

Вот, я тут нашёл:
var
F: TSearchRec;
Path: string;
Attr: Integer;
begin
{Искать все файлы в заданной директории с расширение .wav}
Path := "C:\*.tmp";
{которые имеют атрибуты "Только для чтения" и "Архивный"}
Attr := faReadOnly + faArchive;

FindFirst(Path, Attr, F);

{Если хотя бы один файл найден, то продолжить поиск}
if F.name <> "" then
begin
ListBox1.Items.Add(F.name); {Добавление в TListBox имени найденного файла}
while FindNext(F) = 0 do
ListBox1.Items.Add(F.name);
end;
FindClose(F);
end.


Только как сделать, чтобы он искал по всему диску C:\, a не в корне диска C:\ ???


 
Anatoly Podgoretsky   (2003-11-08 18:26) [6]

Рекурсивно вызывать для папок


 
panov   (2003-11-08 18:26) [7]

Так заглянул в FAQ или нет? Там есть пример.


 
RoLeX   (2003-11-08 18:28) [8]


> panov © (08.11.03 18:26) [7]
> Так заглянул в FAQ или нет? Там есть пример.

Заходил, похоже плохо искал.

To ALL:
function DelDir(dir: string): Boolean;
var fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do begin
wFunc := FO_DELETE;
fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
pFrom := PChar(dir + #0);
end;
Result := (0 = ShFileOperation(fos));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DelDir("C:\XXX\*.tmp");
end;

Вот сделал, тока как сделать, чтобы включая вложенные папки удалял???


 
sniknik   (2003-11-08 18:30) [9]

> Вот, я тут нашёл:
не надо искать. попробуй сам, это совсем несложно, только чуть подумать.

> Только как сделать, чтобы он искал по всему диску C:\, a не в корне диска C:\ ???
надо сделать рекурсию с входом в каждую поддиректорию ... и т.д.


 
Anatoly Podgoretsky   (2003-11-08 18:34) [10]

Эта функция удаляет и папки, если конечно такие будут соотвествовать маске


 
Anatoly Podgoretsky   (2003-11-08 18:35) [11]

sniknik © (08.11.03 18:30) [9]
Не требуется, это вроде рекурсивная функция


 
Anatoly Podgoretsky   (2003-11-08 18:40) [12]

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


 
RoLeX   (2003-11-08 18:41) [13]


> sniknik © (08.11.03 18:30) [9]
> > Вот, я тут нашёл:
> не надо искать. попробуй сам, это совсем несложно, только
> чуть подумать.
>
> > Только как сделать, чтобы он искал по всему диску C:\,
> a не в корне диска C:\ ???
> надо сделать рекурсию с входом в каждую поддиректорию ...
> и т.д.

Несложно? Я думаю ко мне, к начинающему, это не относится.
Чё такое рекурсия и как её сделать???


 
RoLeX   (2003-11-08 18:42) [14]


> Anatoly Podgoretsky © (08.11.03 18:40) [12]
> Что бы не было сомнения, проверил с компиляцией, прекрасно
> удаляет в соответствии с маской.

У меня тоже всё прекрасно удаляет, но во вложенных папках - нет.


 
RoLeX   (2003-11-08 18:45) [15]

Эх! Как в *.Bat файле хорошо:
del "%HOMEDRIVE%\*.tmp" /q/s > NUL
del "D:\*.tmp" /q/s > NUL


Ну так кто-нибудь поможет или нет???


 
Anatoly Podgoretsky   (2003-11-08 18:48) [16]

RoLeX © (08.11.03 18:42) [14]
Я еще раз подчеркиваю включая вложенные папки, для примера в проверке я использовал глубину в три уровня. Все удалили как миленькая и не пикнула.


 
Anatoly Podgoretsky   (2003-11-08 18:50) [17]

Единственное изменение, которое было сделано в примере, это вот это DelDir("C:\XXX\*.tmp"); заменено на DelDir("C:\Temp\*.tmp"); мне лень было создавать папку ХХХ, к меня к ней идиокризия.


 
RoLeX   (2003-11-08 18:54) [18]


> Anatoly Podgoretsky © (08.11.03 18:50) [17]
> Единственное изменение, которое было сделано в примере,
> это вот это DelDir("C:\XXX\*.tmp"); заменено на DelDir("C:\Temp\*.tmp");
> мне лень было создавать папку ХХХ, к меня к ней идиокризия.

И чё во вложенных папках тоже удалялись файлы с расширением *.tmp ???


 
Anatoly Podgoretsky   (2003-11-08 18:56) [19]

Надо ли еще раз повторять, удалялось все что соответствовало маске.


 
Palladin   (2003-11-08 18:58) [20]

Жуть какая.
Рекурсия в данном случае это вызов процедуры самой себя. Попробуй в голове нарисовать эту схему исполнения. И допиши DelDir как надо. Или создай внешнюю процедуру для поиска по структуре диска и вызовом DelDir.


 
Anatoly Podgoretsky   (2003-11-08 19:07) [21]

В местном чаво есть и другие примеры, более подходящие.


 
RoLeX   (2003-11-08 19:35) [22]

Ну всё-таки! Напишите мне код, котороый удаляет по всему диску C:\ файлы с раширением *.tmp. Поторяю, по всему(!) , включая вложенные папки.
У меня сил не хватает, такое сделать, т.к. я начинающий.
Напишите код, пожалуйста.


 
RoLeX   (2003-11-08 20:09) [23]

Вот ещё нашёл:
procedure removeTree(DirName: string);
var
FileSearch: SearchRec;
begin
{ для начала пробегаемся, и удаляем все файлы }
chDir(DirName);
FindFirst("*.*", Directory, FileSearch);
while (DosError = 0) do
begin
if (FileSearch.name <> ".") and (FileSearch.name <> "..") and
((FileSearch.attr and Directory) <> 0) then
begin
if DirName[length(DirName)] = "\" then
removeTree(DirName + FileSearch.Name)
else
removeTree(DirName + "\" + FileSearch.Name);
ChDir(DirName);
end;
FindNext(FileSearch)
end; end;

Скажите это то или не то???
И там дочерта ошибок, исправьте их плиз, и напишите полностью рабочий код!!! ОЧень прошу!


 
panov   (2003-11-08 20:51) [24]

Вот уж над исправлением ошибок не мешает самому потрудиться.
А вот найденый в FAQ пример:
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988622376&n=15


 
RoLeX   (2003-11-08 21:13) [25]


> Вот уж над исправлением ошибок не мешает самому потрудиться.
> А вот найденый в FAQ пример:
> http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988622376&n=15

Насчёт ошибок: самому потрудиться не получиться, т.к. я новичок, и абсолютно плохо знаю Delphi.

А насчёт FAQ:
function DeleteDir(Dir : string) : boolean;Var Found : integer; SearchRec : TSearchRec;begin result:=false; if IOResult<>0 then ; ChDir(Dir); if IOResult<>0 then begin ShowMessage("Не могу войти в каталог: "+Dir); exit; end; Found := FindFirst("*.*", faAnyFile, SearchRec); while Found = 0 do begin if (SearchRec.Name<>".")and(SearchRec.Name<>"..") then if (SearchRec.Attr and faDirectory)<>0 then begin if not DeleteDir(SearchRec.Name) then exit; end else if not DeleteFile(SearchRec.Name) then begin ShowMessage("Не могу удалить файл: "+SearchRec.Name); exit; end; Found := FindNext(SearchRec); end; FindClose(SearchRec); ChDir(".."); RmDir(Dir); result:=IOResult=0;end;
Это код, который ты мне предложил, но мне его пришлось немного подкорректировать:
Удалил RmDir(Dir);, т.к. мне каталог не надо удалять.
Исправил Found := FindFirst("*.*", faAnyFile, SearchRec); на Found := FindFirst("*.tmp", faAnyFile, SearchRec);, т.к. удалять мне все файлы не надо, а только с расширением *.tmp
И в итоге:удаляются файлы с расширением *.tmp, но во вложенных папках не удаляются! А если не заменять Found := FindFirst("*.*", faAnyFile, SearchRec); на Found := FindFirst("*.tmp", faAnyFile, SearchRec);, то удаляются все файлы, зато во вложенных дирректориях тоже.
КОроче я ничего не пойму что творится! Кто-нибудь мне поможет??!!


 
sniknik   (2003-11-08 21:47) [26]

Anatoly Podgoretsky © (08.11.03 18:35) [11]
это я писал не видя RoLeX © (08.11.03 18:28) [8] а на предыдушее. и вроде не везде будет работать (по хелпу "Now Supported on Windows NT", а если не "Now" а версия постарее, а если не NT?).

RoLeX © (08.11.03 18:41) [13]
RoLeX © (08.11.03 21:13) [25]
пример с рекурсией (написано только что ;о)), только потому что и сам вроде чтото делаеш, ищеш... удалять не стал (мне свои файлы жалко :о)) только поиск. (ведь просто?)

procedure TForm1.Button1Click(Sender: TObject);

procedure SearchTmp(StDir: string);
var sr: TSearchRec;
begin
if StDir[Length(StDir)] <> "\" then StDir:= StDir + "\";

if FindFirst(StDir+"*.tmp", faReadOnly + faArchive, sr) = 0 then begin
repeat
ListBox1.Items.Add(StDir+sr.name);
Application.ProcessMessages;
until FindNext(sr) <> 0;
end;
FindClose(sr);

if FindFirst(StDir+"*.*", faDirectory, sr) = 0 then begin
repeat
if sr.Name[1] <> "." then SearchTmp(StDir+sr.name); // <- рекурсия!
until FindNext(sr) <> 0;
end;
FindClose(sr);
end;

begin
SearchTmp("c:\");
end;


 
Maxud   (2003-11-08 21:50) [27]

procedure TForm1.Button1Click(Sender: TObject);

procedure ViewFldr(Fldr: string);
var sr: TSearchRec;
begin
if FindFirst(Fldr+"\*.*",faAnyFile, sr) = 0 then
repeat
if sr.Name[1] <> "." then
begin
ListBox1.Items.Add(fldr+"\"+sr.Name);
if (sr.Attr and faDirectory)=faDirectory then
ViewFldr(fldr+"\"+sr.Name);
end;
until findnext(sr)<>0;
findclose(sr);
end;

begin
ListBox1.Clear;
ViewFldr("c:");
end;


 
Palladin   (2003-11-08 21:51) [28]


> Maxud © (08.11.03 21:50) [27]

Ну а если имя файла ".filename"?


 
Maxud   (2003-11-08 21:52) [29]


> sniknik © (08.11.03 21:47) [26]

sorry, опоздал-с :)


 
Maxud   (2003-11-08 21:59) [30]

Наскоро делал...
вместо sr.Name[1] <> "." можно
сделать (sr.Name <> ".")and(sr.Name<>"..")



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

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

Наверх





Память: 0.53 MB
Время: 0.011 c
1-65971
UniQ
2003-11-10 19:23
2003.11.20
TListView


14-66078
ProjectMaker
2003-10-22 20:15
2003.11.20
Всегда ли находит тот, кто ищет?


3-65782
inspirion
2003-10-30 21:37
2003.11.20
Мастера требуется Ваш совет!


3-65740
saperxl
2003-10-31 20:32
2003.11.20
Пароль к SYSDBA в InterBase


1-65908
FC
2003-11-08 14:05
2003.11.20
Запрет вызова контекстного меню в TEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский