Форум: "Основная";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];
ВнизПоиск файлов на винте Найти похожие ветки
← →
Николай Быков (2002-10-10 13:57) [0]Я часто видел ответы на вопросы про поиск файлов на диске, но на каждый такой вопрос люди отвечали "findfirst findnext". Я добросовестно прочитал текст по этим подпрограммам :-)
Помогите мне организовать поиск этих файлов с заходом во все подкаталоги.
+ Я когда просто такой поиск делал, то так и не понял как сделать проверку что программа уже все файлы нашла (а то она потом просто последний файл постоянно выдает и все)
← →
still (2002-10-10 14:01) [1]1. рекурсивно
2. from Delphi Help
FindNext function
...The return value is zero if the function was successful. Otherwise the return value is a Windows error code.
т.е. while (FindNext(...)=0) do
← →
Doctor Snap (2002-10-10 14:02) [2]napishi proceduru, kotoraja ishet vse faili v odnom kataloge, bez заходом во все подкаталоги, i sdelai tak chto kogda eta procedura nahodit fail s atributom DIR, ona vizivaet samu seba dla etogo naidennogo podkataloga. (rekursija)
A spisok naidennih failov zapisivai v kakoi- nibud hlobalnii spisok.
← →
Pumpkin (2002-10-10 14:04) [3]http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=1015254946&n=19
← →
AL2002 (2002-10-10 14:04) [4]А ты компоненту мне какую пришлёшь интересную? Если да, то лови:
unit FindFile;
interface
uses Windows, SysUtils, Classes, Masks;
procedure GetLogicalDriveList(const List: TStrings);
procedure GetFixedDriveList(const List: TStrings);
procedure FindFiles(Path, Mask: string; List: TStrings; IncludeSubDir: Boolean = True);
implementation
procedure GetLogicalDriveList(const List: TStrings);
var
Size, Pos: Cardinal;
Buffer: array[0..127] of AnsiChar;
P: PChar;
begin
List.BeginUpdate;
try
List.Clear;
Size:=GetLogicalDriveStrings(SizeOf(Buffer), Buffer);
Pos:=0;
while Pos<Size do begin
P:=@Buffer[Pos];
List.Add(P);
while Buffer[Pos]<>#0 do Inc(Pos);
Inc(Pos);
end;
finally
List.EndUpdate;
end;
end;
procedure GetFixedDriveList(const List: TStrings);
var
Size, Pos: Cardinal;
Buffer: array[0..127] of AnsiChar;
P: PChar;
begin
List.BeginUpdate;
try
List.Clear;
Size:=GetLogicalDriveStrings(SizeOf(Buffer), Buffer);
Pos:=0;
while Pos<Size do begin
P:=@Buffer[Pos];
if GetDriveType(P) = DRIVE_FIXED then List.Add(P);
while Buffer[Pos]<>#0 do Inc(Pos);
Inc(Pos);
end;
finally
List.EndUpdate;
end;
end;
procedure FindFiles(Path, Mask: string; List: TStrings; IncludeSubDir: Boolean = True);
var
SearchRec: TSearchRec;
FindResult: Integer;
begin
List.BeginUpdate;
try
Path:=IncludeTrailingBackSlash(Path);
FindResult:=FindFirst(Path+"*.*", faAnyFile, SearchRec);
try
while FindResult = 0 do with SearchRec do begin
if (Attr and faDirectory<>0) then begin
if IncludeSubDir and (Name<>"..") and (Name<>".")
then FindFiles(Path+Name, Mask, List, IncludeSubDir);
end else begin
if MatchesMask(Name, Mask) then List.Add(Path+Name);
end;
FindResult:=FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
finally
List.EndUpdate;
end;
end;
end.
← →
Rouse_ (2002-10-10 14:05) [5]procedure TForm4.FindAllFiles(Dir:String);
const fn: string = "*.*";
var SRec: TSearchRec;
FromF, len:Integer;
begin
if dir[length(dir)]<>"\" then Dir:=Dir+"\";
FindFirst(Dir+fn, faAnyFile, SRec);
while FindNext(SRec) = 0 do
Memo1.Lines.Add(Dir+SRec.Name);
FindFirst(Dir+"*.*", faDirectory, SRec);
while FindNext(SRec) = 0 do begin
with SRec do
if (Attr and 16 <> 0 ) and (Name[1]<>".") then begin
FindAllFiles(Dir+Name);
end;
Application.ProcessMessages;
end;
end;
Желаю успехов
← →
Rouse_ (2002-10-10 14:08) [6]Во блин, пока писал уже накидали, и опять не успел :(
← →
AL2002 (2002-10-10 14:43) [7]>Rouse_ © (10.10.02 14:08)
Зато твой лучше.
← →
Rouse_ (2002-10-10 14:49) [8]> AL2002 © (10.10.02 14:43)
Спасибо на добром слове ;)
← →
Pumpkin (2002-10-10 14:51) [9]2Rouse_ (10.10.02 14:05)
А где же роз.. FindClose?
И проверка результата FindFirst тоже.
← →
Rouse_ (2002-10-10 14:57) [10]Ну я со вчерашнего восьми вечера за компом, упустил :(
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c