아래는 제가 팁에 올린 Directory&File Delete/Move/Rename 함수 임다.
// 두개의 상위가 같으면 디렉토리명 바꾸기이며, 틀리면 이동이 된다.
function OKRenMovDir(AOldPath, ANewPath: string): boolean;
begin
Result := False;
if MoveFile(PChar(AOldPath), PChar(ANewPath)) then
begin
// 원도우즈 탐색기에 알려서 디렉토리변경을 탐색기에 반영시킨다
SHChangeNotify(SHCNE_RENAMEFOLDER, SHCNF_PATH, PChar(AOldPath), pChar(ANewPath));
Result := True;
end;
end;
// 디렉토리 삭제 함수
function OKDelDir(APath: string): boolean;
begin
Result := False;
if DeleteFile(PChar(APath)) then
begin
// 원도우즈 탐색기에 알려서 디렉토리변경을 탐색기에 반영시킨다
SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, PChar(APath), pChar(APath));
Result := True;
end;
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); //타켓디렉토리를 생성한다.
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; //함수의 끝
if SearchRec.attr = fadirectory then //발견한 대상이 디렉토리이면
begin
str := Sourcedir + '' + SearchRec.name; //소스디렉토리 와 발견한 디렉토리를 더한다.
str2 := Destdir + '' + SearchRec.name; //타켓디렉토리 와 발견한 디렉토리를 더해준다.
ForceDirectories(str2); //타켓디렉토리를 생성한다.
CopyDirectory(str, str2); //디렉토리 이므로 여기서 자기자신을 재귀호출한다.
Result := SysUtils.findnext(SearchRec); //결과를 돌려준다.
continue;
end;
if not DirectoryExists(Destdir) then ForceDirectories(Destdir);
아래는 제가 팁에 올린 Directory&File Delete/Move/Rename 함수 임다.
// 두개의 상위가 같으면 디렉토리명 바꾸기이며, 틀리면 이동이 된다.
function OKRenMovDir(AOldPath, ANewPath: string): boolean;
begin
Result := False;
if MoveFile(PChar(AOldPath), PChar(ANewPath)) then
begin
// 원도우즈 탐색기에 알려서 디렉토리변경을 탐색기에 반영시킨다
SHChangeNotify(SHCNE_RENAMEFOLDER, SHCNF_PATH, PChar(AOldPath), pChar(ANewPath));
Result := True;
end;
end;
// 디렉토리 삭제 함수
function OKDelDir(APath: string): boolean;
begin
Result := False;
if DeleteFile(PChar(APath)) then
begin
// 원도우즈 탐색기에 알려서 디렉토리변경을 탐색기에 반영시킨다
SHChangeNotify(SHCNE_DELETE, SHCNF_PATH, PChar(APath), pChar(APath));
Result := True;
end;
end;
즐푸하세여..
타락천사.