아래의 함수를 이용해서 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;
>