Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

file *.* [D6, WinXP]


Страницы:   1 2 3

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Они работают при любом количестве винчестеров.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо