임의로 선택한 폴더를 하위 폴더까지 검색하기 위한 코딩 내용입니다. 대충 수정한 내용입니다.
<=======================================================>
Procedure TForm1.DirectoryCopy(Sourcedir :string; Destdir: string);
var
Pstr : array[0..256] of char; //널 종료 문자열로 바꾸기 위한 저정하기 위한 변수
Pstr2 : array[0..256] of char;
str : string[255]; //경로를 조립하기 위한 임시 문자열
str2 : string[255];
SearchRec : TsearchRec; //소스디렉토리를 검색하고자 할때 쓰이는 레코드(파스칼 구조체입니다)
Result : integer; //찾았는지 못 찾았는지 여부
i, j : integer;
begin
if Sourcedir[Length(Sourcedir)] <> '\' then Sourcedir := Sourcedir + '\';
if Destdir[Length(Destdir)] <> '\' then Destdir := Destdir + '\';
str := Sourcedir + '*.*';
findfirst(str, faanyfile, SearchRec); //소스폴더를 검색한다.
Result := 0; //검색결과 여부의 초기화
While Result = 0 do //다음 화일을 찾아 루프를 반복
begin
if (SearchRec.name = '.') or (SearchRec.name = '..') then
begin //폴더가 자기자신이거나 상위폴더일 경우
Result := findnext(SearchRec); //검색 결과 화일을 찾으면 1이다.)
continue;
end;
if SearchRec.attr = fadirectory then //발견한 대상이 디렉토리이면
begin
Result := findnext(SearchRec); //결과를 돌려준다.
continue;
end;
Result := findnext(SearchRec); //검색여부
end; //While 문의 끝
end;
<======================================================>
제가 의문이 생기는 것은
1, 하드디스크에서는 정상적으로 하위 폴더까지 파일을 검색합니다. 그런데 CD-ROM은 하위 폴더까지 검색은 하지만 이 결과를 표시할 경우 폴더까지 출력합니다.
2, 여기서 특정 확장자들(*.jpg, *.jpeg 등)을 일일이 검색하는 것이 아니라 한번에 2개 이상을 찾는 방법이 없는지 하는 것입니다. 물론 각각을 조회하면 *.jpg를 조회하고 다음으로 *.jpeg를 조회하면 되지만 이것이 아니라는 것입니다. 하드디스크에서 일괄적을 조회하는 방법을 말하는 것입니다.
하나의 프로그램을 구상하여 만들어 나가면서 부닥치는 문제를 해결해 나가면 다른 욕심이 생기고, 이런 것들을 하나씩 해결하여 추가하다보면 프로그램을 만드는 즐거움이 생깁니다. 그러니 도와주십시요.
첨부파일은 위 코딩의 수정 전 언본 파일들입니다. 물론 다른분이 만들어 놓으신 것이구요...