저는 금일날짜의 폴더를 만들고 source폴더내의 화일및 sub_폴더의
내용을 target_folder에 복사를 하려고 합니다.
^^밑의 소스중 des := 'c:'+get_date; => 내PC to 내 PC의 경우
원하는 대로 결과가 나옵니다.
??그러나 f:드라브롤 win_nt의 화일서버의 folder를 넷웍드라이브(f:)로 잡아놓고 des := 'f:'+get_date; => 내pc to 화일섭의 경우
위와 결과가 다릅니다. 폴더 및 sub 폴더내의 화일일부가 누락되어
copy됩니다.
참이상합니다.
꼭 도와주세요
procedure TForm1.FormCreate(Sender: TObject);
var
src,des,get_date : string;
begin
get_date := datetostr(now);
src := 'c:bosang';
des := 'f:'+get_date;
ForceDirectories(des);
DirectoryCopy(src,des);
end;
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); //타켓디렉토리를 생성한다.
ForceDirectories(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; //함수의 끝