Q&A

  • 디렉토리 복사 어떻게 하나요?
디렉토리 생성과 제거를 위한 함수는 있던데...
복사는 어떻게 하는지 잘 모르겠습니다.

파일 복사는 CopyFile(...) 함수로 가능한데
디렉토리 복사는 어떻게 합니까?

CopyDirectory() 같은 함수는 없습니까?

MoveFile(...)로 디렉토리 이름 변경이나 move는 되던데
있을만한 디렉토리 복사 함수는 없군요?

아시는 분 계시면 좀 가르쳐주세요.

감사합니다.

4  COMMENTS
  • Profile
    타락천사 2002.10.21 20:24
    안녕하세여. 타락임다..

    아래는 제가 팁에 올린 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;

    즐푸하세여..

    타락천사.
  • Profile
    정성훈 2002.10.21 19:47
    팁에서 가져온 자료입니다. 참조하세요..(하위폴더까지 복사함..)

    디렉토리 단위로 복사하는 재귀호출 함수입니다.
    소스디렉토리와 타켓디렉토리를 인수로 받아서 소스디렉토리내의 모든
    하부 디렉토리와 화일을 타켓디렉토리로 복사합니다.

    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; //함수의 끝




  • Profile
    롯데 2002.10.21 21:32
    답변 감사합니다.

    코드를 아래와 같이 고치면 조금 더 낫군요..  너무 감사합니다.

          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);
  • Profile
    롯데 2002.10.21 21:48
    아참.. 그리고 while 문 블럭 다음에 반드시 아래 코드를 써주셔야 할 것 같습니다. 감사합니다.


      FindClose(SearchRec);  
    • 샤리
    • 2002.10.21 21:50
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 전종표
      2002.10.21 22:09
      델7에 보면 Indy 가 있습니다.  그걸로 대체되었습니다. Indy 의 데모는 델설치프로그램에 ...
    • 김해성
    • 2002.10.21 21:08
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 전종표
      2002.10.21 21:59
      SpeedButton 은 DataSet 과 연결할 수 없습니다. 따라서 OnClick 에 직접 프로그램을 넣으셔야 합니다....
    • 김해성
      2002.10.21 22:38
      Button과 연결할려면 어떻게 해야돼여?
    • 이치영
    • 2002.10.21 20:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 전종표
      2002.10.21 21:16
      ---- unit2.pas ...    function PumSearch(cFileNo:string): TClientDataSet; functi...
    • 2002.10.21 20:28
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 전종표
      2002.10.21 20:59
      DB 의 EOF 를 모르는게 아닌가 싶네요.  그냥 DB 만 연결해서 출력한 것 같진 않고,  ...
    • 2002.10.21 23:41
      질문에 대한 답변 감사 드립니다. 데이터를 앞으로 옮기는 작업이 어떤것을 말하는지 잘 몰라서 이렇게 ...
    • 김기성
    • 2002.10.21 20:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2002.10.21 20:16
      DelForEx 란게 있습니다. 자료실을 검색해 보심 나올겁니다. 즐푸하세여.. 타락천사.
    • 정희섭
    • 2002.10.21 19:25
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 정희섭
      2002.10.22 02:03
      tdump edrlib.dll 을 실행한 결과 -stdcall 또는 CALLBACK 인경우 Exports from EDRLIB.dll  ...
    • 이광수
      2002.10.21 23:53
      우선 dependeny walker인데요. 좀 잘못알려드렸군요. vc++을 다 까셨다면 시작폴더에 등록된 것에 보시...
    • 이광수
      2002.10.21 20:23
      VC++에서 Dependency walker로 보시면 이해가 가실겁니다. dll을 열어보시면요. 즉 cdecl로 컴파일하시...
    • 정희섭
      2002.10.21 21:00
      자꾸 질문해서 미안합니다.
    • 타락천사
      2002.10.21 20:12
      안녕하세여. 타락임다.. 흘흘.. 어려운 질문 이군여..^^ 주로 DLL 을 쓸때(호환 문제에) 필요한 사항 ...
    • 정희섭
      2002.10.21 21:06
      답변 감사드립니다. VC++ DLL에서 CALLBACK 대신에 __stdcall 로 선언하고 델파이에서 stdcall로 바꾸...
    • 타락천사
      2002.10.21 22:36
      안녕하세여. 타락임다.. VC++ DLL 써본지가 오래되서, 기억이 잘 안납니다.. 앞의 코드에선 CALLBACK...
    • 김장호
    • 2002.10.21 12:55
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2002.10.22 03:51
      안녕하세요. 타락임다.. 아마 Canvas 에는 회전된 그림이 있을 겁니다.. TBitmap 을 선언해서.. C...
    • 박상윤
      2002.10.21 19:25
      24비트 RGB (8bit,8bit,8bit) 16-5,5,5    -5,6,5 포맷 2가지입니다.    그럼 여...
    • 나윤호
    • 2002.10.21 05:06
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2002.10.21 20:46
      안녕하세여. 타락임다.. ActiveForm Paint 이벤트가 점 문제가 있나여? 그럼 ActiveForm 크기에 해당...
    • 나윤호
      2002.10.21 23:50
      activeX콘트롤 말하는거 맞는데요....델파이에서 acitveFrom이라구 되어있잖아요....일반 애플로 했던것을 ...
    • 롯데
    • 2002.10.21 04:00
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2002.10.21 20:24
      안녕하세여. 타락임다.. 아래는 제가 팁에 올린 Directory&File Delete/Move/Rename 함수 임다. /...
    • 정성훈
      2002.10.21 19:47
      팁에서 가져온 자료입니다. 참조하세요..(하위폴더까지 복사함..) 디렉토리 단위로 복사하는 재귀호출 ...
    • 롯데
      2002.10.21 21:32
      답변 감사합니다. 코드를 아래와 같이 고치면 조금 더 낫군요..  너무 감사합니다.  ...
    • 롯데
      2002.10.21 21:48
      아참.. 그리고 while 문 블럭 다음에 반드시 아래 코드를 써주셔야 할 것 같습니다. 감사합니다. &nbs...
    • 타락천사
      2002.10.21 18:51
      안녕하세요. 타락임다. 보아하니 Win2K 에서 Virtual SMTP Server 를 활용해서 메일을 발송하려는가 보...
    • 김세형
    • 2002.10.21 01:10
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김세형
      2002.10.22 11:15
      질문이 너무 막연했었습니다. 자답으로 올릴께여~ 쓰래드의 Synchronize 함수로 해결했습니당~ ^^;; ...
    • 타락천사
      2002.10.22 02:01
      안녕하세여.. 타락임다.. Canvas 는 ThreadSafe 합니다.. Canvas.Lock 과 Canvas.UnLock 을 쓰세여.....
    • 이영동
    • 2002.10.20 22:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • *^^*
      2002.10.21 02:44
          필드 선택하시고, 프로퍼티 보면     "DisplY Format" 에다...
    • 김종균
    • 2002.10.20 21:03
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 정성훈
      2002.10.21 19:40
      strout := inttostr(strtoint(strout) * 500); 이부분이죠? 날짜 * 500억씩 ㅡ.ㅡ 아래 Lookup 설명한...
    • 정경철
      2002.10.20 21:25
      lockup field가 아님니다.. 죄송 합니다. Calculated Field를 만들어서 날자와 연체료를 계산하면 될것...
    • 정경철
      2002.10.20 21:20
      lockup Field 를 만들어서 해보세요..
    • 김종균
      2002.10.20 22:26
      lockup Field가 먼지 모르거든여.. 답변부탁드립니다. 좋은 하루되세요
    • 정성훈
      2002.10.21 19:29
      어떤 한 필드의 값의 정보를 다른테이블에 있는것과 비교해서 필요한 필드를 가져오는 것입니다. 예를 ...
    • 호현수
    • 2002.10.20 09:48
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김태훈
      2002.11.22 07:23
      공유기 같은 걸로 물린 경우 사설아이피를 할당받아서 쓰게됩니다. 클래스에 따라 할당된 아이피가 다름...
    • 타락천사
      2002.10.21 18:45
      안녕하세여. 타락임다.. 내부 IP 는 임의로 할당할 수 있습니다. 따라서 외부IP 와 같이 부여 할 수도 ...
    • 호현수
      2002.10.22 16:07
    • 타락천사
      2002.10.21 20:39
      안녕하세여. 타락임다.. 우선 다른 여러대의 컴퓨터에서 실행시켜 봅니다. 만약 델파이가 깔려 있는 컴...
    • 이영동
    • 2002.10.20 05:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이영범
      2002.10.21 19:04
      코딩으로 하는 방법은... TQuery의 AfterOpen 이벤트에 아래와 같이 써주시면 됩니다. TNumericField...
    • 정경철
      2002.10.20 21:29
      방법은 여러가지가 있겠지만 제가 주로 사용 하는 방법은 테이블을 더블 클릭 하여 표시될 필드를 선택 하...