Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-68693
Shadow
2002-10-09 14:26
2002.10.21
Замена кода нажатой клавишы.


7-69037
Mars
2002-08-14 15:57
2002.10.21
Как управлять модемом?


4-69053
Демонов Е.В.
2002-09-06 09:17
2002.10.21
Как перехватить нажатие кнопки Windows и M


6-68903
ssv
2002-08-20 12:53
2002.10.21
Помогите с кодом


1-68860
Пончик
2002-10-10 11:33
2002.10.21
FrontPage





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