선택된 디렉토리 밑에 서브디렉토리가 있는지
서브디렉토리가 있다면 몇개 있고 디렉토리명이 먼지하구요
서브디렉토리에 그 아래 서브디렉토리가 있다면 몇개이면 폴더명이 어떻게 되는지
휴 힘드네요~ 뷰로 해보고 셀트리뷰도 해봐도 안되네요~ 고수님 플리즈
아래 코드는 디렉토리를 검색하여 파일을 찾는 예제입니다.
원하시는 내용이 아래 코드에 모두 들어있습니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ListFiles(D,Name,SearchName : String);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ListFiles(D, Name, SearchName: String);
var
SR: TSearchRec;
begin
if D[Length(D)] <> '\' then
D := D + '\';
if FindFirst(D+Name, faAnyFile, SR) = 0 then
repeat
if (SR.Attr <> faDirectory) and (SR.Name[1] <> '.') then
if AnsiUpperCase(SR.Name) = AnsiUpperCase(SearchName) then
Label1.Caption := D+SR.Name; {파일을 찾으면 label1.Caption에 디렉토리를 표시}
Until (FindNext(SR)<>0);
FindClose(SR);
if FindFirst(D+'*.*', faDirectory, SR) = 0 then
begin
repeat
if ((Sr.Attr and faDirectory) = faDirectory) and
(SR.Name[1]<>'.')
then
ListFiles(D+SR.Name+'\', Name, SearchName); // 재귀적 호출을 한다
until (FindNext(SR) <> 0);
end;
FindClose(SR);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// c:\ 부터 하위 디렉토리에서 delphi32.exe 파일을 찾는다
ListFiles('c:\','*.*','delphi32.exe');
end;
end.
구창민님 로직과 비슷하게는 구현해봤는뎅~ 해결이 안되더군요 ㅠ.ㅠ;;;
파랑망토님 로직을 써보니~ 역시나 구창민님 로직하고 비슷한 결과과 나오더라구요~
얼빗 본것도 같은뎅~ 그 부분을 못 찾아서 이렇게 궁상을 떠네요 ㅋㅋㅋ
답변 주셔서 감사합니다.
창민님께서 올린 소스중에 재귀적 호출을 한다 부분이 핵심입니다.
하위 폴더 탐색할때 주로쓰는 방식인데 재귀호출을 먼저 이해하시면
소스 이해가 빠르실듯 하네요~
백록화님 감사합니당..
문법강조가 잘 안돼서 삽질 하고 있는데...그 새 보신 모양이군요 ㅋ