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; //찾았는지 못 찾았는지 여부 BEGIN 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 str := Sourcedir + '' + SearchRec.name; //소스디렉토리 와 발견한 디렉토리를 더한다. str2 := Destdir + '' + SearchRec.name; //타켓디렉토리 와 발견한 디렉토리를 더해준다. Mkdir(str2); //타켓디렉토리를 생성한다. DirectoryCopy(str, str2); //디렉토리 이므로 여기서 자기자신을 재귀호출한다. Result := findnext(SearchRec); //결과를 돌려준다. continue; end;
//아래는 찾은것이 화일일 경우 복사를 하는 부분이다. //완전 경로명으로 조립해 주어야 한다. str := Sourcedir + '' + SearchRec.name; str2 := Destdir + '' + SearchRec.name; StrPcopy(pstr, str); StrPcopy(pstr2, str2); CopyFile(pstr, pstr2, false);
//이것은 API함수이다. Parameter는 //CopyFile(소스화일명, 데스트화일명, 플래그) 마지막 인자인 플래그는 false 일경우 화일이 존재할때 덮어쓴다.) Result := findnext(SearchRec); //검색여부 end; //While 문의 끝
END; //함수의 끝 |