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

Вниз

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

 
sers   (2002-11-21 17:12) [0]

Добрый день.

Мне необходимо удалить все файлы по заданной маске (*.zzz) на копмьютере. Если сделать поиск по FindFirst... то работает слишком долго.

Может мне ShFileOperation сможет помочь ?

Пробовал так:

FillChar(fromBuf, SizeOf(fromBuf), 0);
FillChar(fromBuf, SizeOf(toBuf), 0);
StrPCopy(fromBuf, "c:\*.zzz");
with OpStruct do
begin
wnd:=Handle;
wFunc:=FO_DELETE;
pFrom:=@fromBuf;
pTo:=@toBuf;
fFlags:=FOF_NOCONFIRMATION or
FOF_NOERRORUI or
FOF_SILENT;
fAnyOperationsAborted:=false;
hNameMappings:=Nil;
lpszProgressTitle:=Nil;
end;
ShFileOperation(OpStruct);

Удаляет только файлы только в корне диска, а хотелось бы чтобы удалялось и во всех поддиректориях.

Подкиньте идей.

Заранее благодарен.


 
KoluChi   (2002-11-21 17:21) [1]

FindFirst + FindNext + рекурсия + FindClose


 
KoluChi   (2002-11-21 17:23) [2]

http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=1015254946&n=19


 
sers   (2002-11-21 17:25) [3]

Это я знаю. Писал же:

"Если сделать поиск по FindFirst... то работает слишком долго."

Интересуют другие варианты.


 
KoluChi   (2002-11-21 17:46) [4]

>"Если сделать поиск по FindFirst... то работает слишком долго."
А ты видел где-нибудь мнгновенный поиск?
Поиск в Windows быстрый?


 
KoluChi   (2002-11-21 17:50) [5]

IMHO, ShFileOperation в поиске не поможет :(


 
ЮРИЙ_К   (2002-11-21 17:51) [6]

Дык чего голову ломать, в RX есть специальнно для этого функция


 
sers   (2002-11-21 17:54) [7]

>> Дык чего голову ломать, в RX есть специальнно для этого функция

Не подскажешь какая ?


 
KoluChi   (2002-11-21 17:59) [8]

RX: FileUtil.pas
function DeleteFiles(const FileMask: string): Boolean;
var
SearchRec: TSearchRec;
begin
Result := FindFirst(ExpandFileName(FileMask), faAnyFile, SearchRec) = 0;
try
if Result then
repeat
if (SearchRec.Name[1] <> ".") and
(SearchRec.Attr and faVolumeID <> faVolumeID) and
(SearchRec.Attr and faDirectory <> faDirectory) then
begin
Result := DeleteFile(ExtractFilePath(FileMask) + SearchRec.Name);
if not Result then Break;
end;
until FindNext(SearchRec) <> 0;
finally
FindClose(SearchRec);
end;
end;


 
ЮРИЙ_К   (2002-11-21 17:59) [9]

DeleteFiles Function

Unit
FileUtil

Declaration
function DeleteFiles(const FileMask: string): Boolean;

Description
Удаляет все файлы, заданные маской FileMask.

DeleteFilesEx Function

Unit
FileUtil

Declaration
function DeleteFilesEx(const FileMasks: array of string): Boolean;

Description
Удаляет все файлы, заданные масками FileMasks.


 
Romkin   (2002-11-21 18:06) [10]

А что, трудно сделать пуск -> поиск -> файлы и папки? Потом все найденное ctrl+a и shift+del??


 
sers   (2002-11-21 19:33) [11]

Ясно, в общем rx функция сводится к тем же FindFirst/FindNext от которых я так хотел уйти.
Кроме того эта функция удаляет файлы только в заданной директории, а нужно на всем диске (см. мой первый пост). Перделать не сложно, но суть в том, что я искал альтернативный подход.
Похоже, что другого не дано. Или мож кто-нибудь еще поможет ?


 
Song   (2002-11-21 21:09) [12]

format c: /q


 
Separator   (2002-11-22 08:22) [13]

используй Windows.FindFirstFile, Windows.FindNextFile, Windows.FindClose


 
KoluChi   (2002-11-22 10:45) [14]

>Separator © (22.11.02 08:22)
>используй Windows.FindFirstFile, Windows.FindNextFile, >Windows.FindClose
FindFirst, FindNext, FindClose, FindClose как раз и используют
Windows.FindFirstFile, Windows.FindNextFile, Windows.FindClose;


 
Song   (2002-11-22 10:48) [15]

>>FindFirst, FindNext, FindClose, FindClose как раз и используют
Точнее я бы сказал что это они и есть :-))


 
F1   (2002-11-22 10:52) [16]

Да че ты заморачиваешься, все равно все будет сводится к Find...
А то, что медленно, так енто ж поиск!


 
Separator   (2002-11-22 10:53) [17]

Просто если сразу использовать Windows.FindFirstFile, Windows.FindNextFile, Windows.FindClose, то будет несколько преимуществ:
1) меньший код, т.к. нужен только модуль Windows
2) более быстрая работа, т.к. не идет вызов лишних процедур.
3) не используется VCL
Правда все эти преимущества незначительны и почти незаметны


 
KoluChi   (2002-11-22 11:00) [18]

>Separator © (22.11.02 10:53)
Т.е. надо выдернуть FindFirst, FindNext, FindClose из SysUtils и
вставить в свой модуль (меньше уже не напишешь), да можно конечно, но смысл?
1) ну это да (хотя SysUtils наверное все равно бдет где-нибудь подключен)
2) не согласен - то же самое
3) VCL и так не используется


 
Anatoly Podgoretsky   (2002-11-22 11:05) [19]

Согласиться можно, но отчасти, потому что придется делать обработку тех же самых ситуайций, что и Find..., при этом будет ли оно также правильно, во вторых код не уменьшится, а увеличится, так как произойдет дублирование кода (как правило где нибудь в другом месте уже будут использованы уже эти функции, в случае использования SysUtils прямо или косвенно).

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



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

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

Наверх





Память: 0.48 MB
Время: 0.006 c
3-4179
kombat
2002-11-12 17:54
2002.12.02
Как открыть таблицу из указанного расположения с помощью АДО


3-4235
Cranium
2002-11-14 13:32
2002.12.02
Из Excel в БД .........


1-4429
Novichek
2002-11-19 14:05
2002.12.02
Сортировка


6-4535
Smart
2002-10-04 09:32
2002.12.02
Как удаленно определить имя пользователя?


6-4531
Nimble
2002-09-24 08:02
2002.12.02
Сетевое окружение





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