Q&A

  • 폴더를 전체를 복사하는 방법...
특정 폴더 전체를 복사를 할려고 합니다.
'원본'이라는 폴더안에 파일과 하위폴더가 존재하더라도..
'백업'이라는 폴더로 전부 복사를 할려고 합니다.
방법전 부탁드립니다.
한마디로 탐색기 파일 복사입니다.
2  COMMENTS
  • Profile
    최은석 2002.11.22 21:13
    팁 란에서 찾은겁니다..
    도움이 될지 모르겠네여...

    안녕하세여. 타락임다.

    음냐리. 다들 조은 팁을 올려주시는 군여.
    근데 어쩌져? 전 기본 델파이 사용법으로만 코딩을 해서 특이하게 올릴게 없네여.

    아래는 제가 쓰는 디렉토리 삭제, 이동 함수 임다. 아이 부끄러.. 후다닥~~

    // 두개의 상위가 같으면 디렉토리명 바꾸기이며, 틀리면 이동이 된다.
    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;




  • Profile
    곰다방~미스김 2002.12.27 00:20
    저두 팁에서 찾은건데염.....
    OKRenMovDir함수는 디렉토리를 잘라내서 이동하는거 같구염...
    원본폴더를 그대로 놔눈상태에서 다른 폴더로 복사하는 방법은 아래 프로시저로 해보세염...
    테스트 해봤는데 잘 되네염...
    즐프염......

    Procedure TMain.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;