Q&A

  • 재귀호출해서 하위디렉토리의 모든파일찾기에서 ..[소스있습]
아래의 함수를 이용해서 foldername에 'c:'를 넣고 리스트박스대신에 스트링그리드에 일어온파일들이 나타나게했더니 몇백개는 제대로 나타나는데 그밑으로는 스트링그리드에 공백으로 나타나는군요.
메모리 때문에 그런건지...
만약 스트링그리드의 메모리때문에 그렇다면 해결할수있는 방법이 없을까요?
2GB짜리 하드디스크를


> function TForm1.FindFile(FolderName: String): Integer;
> var
>  SR : TSearchRec;
> begin

  파일을 *.*로 싸그리 검색하는 군요

>  if (findFirst(FolderName+'*.*',faAnyFile,Sr)) = 0 then
>  begin
    현재디렉토리나 부모디렉토리는 넘어가구요
>    if (Sr.Name <> '.') and (Sr.Name <> '..') then
>    begin
>      if (SR.Attr and faDirectory) = faDirectory then
>      begin

      디렉토리면 다시 FindFile()함수를 실행해서
      재귀호출에 들어갑니다.
      호출된 FindFile()함수가 일을 다마치고 나면
      호출한 FindFile()함수는 자신이 하던 일을 마칠때까지
      작업을 하겠죠.

>        FindFile(FolderName+''+SR.Name);
>      end
>      else
>      begin
      
      디렉토리가 아닌 파일이면 메모에 집어넣는군요.

>        Memo1.Lines.Add(SR.Name);
>      end;
>    end;

    파일을 계속찾아가면서 잡히는 넘이 없을 때까지
    위와 같은 일을 계속하면서 재귀호출을 합니다

>    while FindNext(sr) = 0 do
>    begin
>      if (Sr.Name <> '.') and (Sr.Name <> '..') then
>      begin
>        if (SR.Attr and faDirectory) = faDirectory then
>        begin
>          FindFile(FolderName + ''+SR.Name);
>        end
>        else
>        begin
>          Memo1.Lines.Add(FolderName+''+SR.Name);
>        end;
>      end;
>    end;
>    FindClose(sr);
>  end;
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
>  FindFolder : String;
> begin
>  Memo1.Lines.Clear;
>  FindFolder := DirectoryListBox1.Directory;
>  if FindFolder[Length(FindFolder)] = '' then
>  begin
>    FindFolder := Copy(FindFolder,1,Length(FindFolder)-1);
>  end;
>  FindFile(FindFolder);
> end;
>
0  COMMENTS