![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
file *.* [D6, WinXP]
LeonW © (2005-09-28 05:28:00)Привет! как дела? а можно ли сделать так - что бы программа искала на пример все файля *.txt или *.bmp и удаляла их????
приэтом стоит два винчестера.
посибо с уважением Leon
leonw (2005-09-29 06:52:00) [41]а для чего нужен ExpandFileName???
LeonW (2005-09-29 06:50:00) [42]
> DeleteFile
Привет! спасибо что помогаешь! вот что у меня получилось!
осталось сделать старт???? для SearchInDir
procedure SearchInDir(Mask, Dir: string; Subdir: Boolean);
var
r: integer;
f: TSearchRec;
begin
if Dir = '' then Exit;
if Dir[Length(Dir)] <> '\' then Dir := Dir + '\';
{$I-}
ChDir(Dir);
{$I+}
if IOResult <> 0 then Exit;
r := FindFirst('*.fdk', faAnyFile, f);
while r = 1 do
begin
if MatchesMask(f.Name, Mask) then
if (f.Name <> '.') and (f.Name <> '..') then
DeleteFile(ExpandFileName(f.Name));
if (f.Attr and faDirectory) = faDirectory then
if SubDir = True then
begin
if (f.Name <> '.') and (f.Name <> '..') then
begin
SearchInDir(Mask, ExpandFileName(f.Name), SubDir);
ChDir(Dir);
end;
end;
r := FindNext(f);
end;
FindClose(f);
end;
Adder (2005-09-29 04:33:00) [43]
> jack128 © (28.09.05 14:54) [6]
//Offtopic
Он себе и без нашей помощи винты "отформатирует"...случайно %-/
Прячьте спички от детей, не давайте готового кода...особенно без комментариев... они его так переделают....
Adder (2005-09-29 04:22:00) [44]Код, который привел Федор, ищет файлы, но не удаляет их, а заносит в список List -)
Когда отладишь код (без удаления файлов), List.Add можешь заменить на DeleteFile, а
procedure SearchInDir(Mask, Dir: string; Subdir: Boolean; var List: TStringList);
заменить на
procedure SearchInDir(Mask, Dir: string; Subdir: Boolean);
Adder (2005-09-29 04:11:00) [45]
> MatchesMask поменял на deletefile> удалять?
Не делай так больше
Перевожу:
if MatchesMask(f.Name, Mask) then
//Если имя найденного файла соответствует маске (mask, например для всех текстовых файлов mask='*.txt'), то
if (f.Name <> '.') and (f.Name <> '..') then
// Если имя файла не '.' и не '..' (не каталог)
List.Add(ExpandFileName(f.Name));
// добавляем имя файла в список List
> Федор - var List: StringList - заменил на list: TStrings.
>
> т.к показывала ошибку.
Так тоже не делай -)
Ошибку показывала, потому что у Федора опечатка
procedure SearchInDir(Mask, Dir: string; Subdir: Boolean; var List: TStringList);
leonw (2005-09-29 02:06:00) [46]MatchesMask поменял на deletefile, а с mask - что делать? удалять?
leonw (2005-09-29 01:40:00) [47]Федор - var List: StringList - заменил на list: TStrings.
т.к показывала ошибку.
но вот одно не могу понять - if MatchesMask(f.Name, Mask) then.
посибо Leon
LeonW (2005-09-28 23:33:00) [48]Привет! посибо всем!
я только начинаю учить delphi - и поэтому не все всегда понятно.
и большое спосибо!
если вам понадобится помощь пишите сюда или на емаил,
я всегда буду рад помочь!!!!!! (чем смогу)
Grief (2005-09-28 16:09:00) [49]2jack128 - конечно нет, я понятия не имею, о ком идет речь...
Германн (2005-09-28 15:23:00) [50]2 BFG9k © (28.09.05 13:57) [4]
Образование -среднее. :)
jack128 (2005-09-28 14:54:00) [51]Grief © (28.09.05 14:01) [5]
даже дед одного моего знакомого клепает какую то игрушку
Если твой знакомый - внук app, так Анатолий уже очень давно дописал ту игрушку ;)
По теме
type
TIterateFileProc = procedure (const Filename: string;
const FFD: TWin32FindData; var Continue: boolean) of object;
function IterateFiles(StartDir: string; FileMask: string;
Callback: TIterateFileProc; Recurse: boolean = True): boolean;
var
ffd: TWIN32FindData;
ffh: THandle;
begin
Assert(Assigned(Callback));
if StartDir = '' then
raise Exception.Create('Введите директорию');
Result := True;
if StartDir[Length(StartDir)] <> '\' then
StartDir := StartDir + '\';
ffh := FindFirstFile(PChar(StartDir + FileMask), ffd);
if ffh <> INVALID_HANDLE_VALUE then
try
repeat
if not ((string(ffd.cFileName) = '.') or (string(ffd.cFileName) = '..')) then
begin
Callback(StartDir + ffd.cFileName, ffd, Result);
if not Result then Exit;
if Recurse and ((ffd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) then
begin
Result := IterateFiles(StartDir + ffd.cFileName, FileMask, Callback);
if not Result then Exit;
end;
end;
until not FindNextFile(ffh, ffd);
finally
Windows.FindClose(ffh);
end;
end;
procedure DeleteFileProc(Data: TObject; const Filename: string;
const FFD: TWin32FindData; var Continue: boolean);
begin
DeleteFile(PChar(FileName));
end;
procedure RemoveAllFiles(AMask: string);
var
Buf: array [0..1023] of char;
P: PChar;
Callback: TMethod;
begin
if GetLogicalDriveStrings(SizeOf(Buf), @Buf) > 0 then
begin
P := @Buf[0] ;
Callback.Data := nil;
Callback.Code := @DeleteFileProc;
while P^ <> #0 do
begin
IterateFiles(string(P), AMask, TIterateFileProc(Callback), True);
P := P + StrLen(P) + 1;
end;
end;
end;
Пример:
RemoveAllFiles('*.txt');
ps код не тестил, так что если вдруг он тебе отформатирует винты, не обессуть ;)
Grief (2005-09-28 14:01:00) [52]...offtopic...А че такого? Щас вон все в кодинг лезут, даже дед одного моего знакомого клепает какую то игрушку...offtopic...
BFG9k (2005-09-28 13:57:00) [53]1996 год - 9 лет. Охуеть (да простит меня модератор)!
Федор (2005-09-28 08:33:00) [54]В uses еще добавь Masks
Федор (2005-09-28 08:30:00) [55]
procedure SearchInDir(Mask, Dir: string; Subdir: Boolean; var List: StringList);
var
r: integer;
f: TSearchRec;
begin
if Dir = '' then Exit;
if Dir[Length(Dir)] <> '\' then Dir := Dir + '\';
{$I-}
ChDir(Dir);
{$I+}
if IOResult <> 0 then Exit;
r := FindFirst('*.*', faAnyFile, f);
while r = 0 do
begin
if MatchesMask(f.Name, Mask) then
if (f.Name <> '.') and (f.Name <> '..') then
List.Add(ExpandFileName(f.Name));
if (f.Attr and faDirectory) = faDirectory then
if SubDir = True then
begin
if (f.Name <> '.') and (f.Name <> '..') then
begin
SearchInDir(Mask, ExpandFileName(f.Name), SubDir, List);
ChDir(Dir);
end;
end;
r := FindNext(f);
end;
FindClose(f);
end;
dmitry501 (2005-09-28 05:42:00) [56]LeonW © (28.09.05 5:28)
Привет! дела хреново.
Можно. Используй функцииFindFirst, FindNext, FindCloseОни работают при любом количестве винчестеров.