Форум: "Основная";
Текущий архив: 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