Q&A

  • 폴더 삭제 법좀요..
<!--CodeS-->
if ckdir.checked then
     begin
          for i := 0 to od2.Files.count do
          begin
              try
//                 filename := tdr + extractfilename(od2.files.Strings[i]);
//                 assignfile(myfile, filename);
                   movefile(PChar(tdrfile), Pchar(sdrfile));             //파일이동
              except
                    continue;
              end;
          end;
        try
           od2.Destroy;
        except
              showmessage('od2.destroy false');
        end;

          removedirectory(PChar(tdr));
          if IOResult <> 0 then
          begin
             MessageDlg('Cannot remove directory', mtWarning, [mbOk], 0);
          end
          else
          begin
             MessageDlg('Directory removed', mtInformation, [mbOk], 0);
          end;
     end;
<!--CodeE-->


tdr은
if od2.execute then begin
        tdr := ExtractFileDir(od2.filename);
end;

입니다.

폴더삭제 가..죽어도 안돼요.ㅠ.ㅠ
removedirectory('c:\aa'); 라고하면 되는데..
저렇게 string 에.. 들어있는 경로를 pchar로 해서 하니 불가네요
rmdir(tdr)해도 불가고..ㅠ.ㅠ

폴더삭제법 알려주세요..

//-----------------------------------------------

a폴더와 b폴더 를 비교해서

a폴더에 있는 파일들이 b폴더에 있으면 삭제하고

b폴더에 있는 남아있는 파일들을 a폴더로 복사하고

b폴더를 삭제할려고 하는데.. 힘드네요 ㅠ.ㅠ
4  COMMENTS
  • Profile
    이강석 2010.01.30 23:53
    <!--CodeS-->
    function DirectoryCopy(Sourcedir :string; Destdir: string) : Boolean;
    var
    Pstr : array[0..256] of char; //널 종료 문자열로 바꾸기 위한 저정하기 위한 변수
    Pstr2 : array[0..256] of char;
    str : string[255]; //경로를 조립하기 위한 임시 문자열
    str2 : string[255];
    SearchRec : TsearchRec; //소스디렉토리를 검색하고자 할때 쓰이는 레코드(파스칼 구조체입니다)
    nResult : integer; //찾았는지 못 찾았는지 여부
    i, j : integer;
    begin
    Result := True;
    try
    if Sourcedir[Length(Sourcedir)] <> '\' then Sourcedir := Sourcedir + '\';
    if Destdir[Length(Destdir)] <> '\' then Destdir := Destdir + '\';

    str := Sourcedir + '*.*';
    FindFirst(str, faanyfile, SearchRec); //소스폴더를 검색한다.
    nResult := 0; //검색결과 여부의 초기화

    While nResult = 0 do //다음 화일을 찾아 루프를 반복
    begin
    inc(j);

    if (SearchRec.name = '.') or (SearchRec.name = '..') then
    begin //폴더가 자기자신이거나 상위폴더일 경우
    nResult := FindNext(SearchRec); //검색 결과 화일을 찾으면 1이다.)
    continue;
    end;

    if SearchRec.attr = fadirectory then //발견한 대상이 디렉토리이면
    begin
    str := Sourcedir + SearchRec.name; //소스디렉토리 와 발견한 디렉토리를 더한다.
    str2 := Destdir + SearchRec.name; //타켓디렉토리 와 발견한 디렉토리를 더해준다.
    //한번만들고 나면 계속만들필요가 없다....
    try
    Mkdir(str2); //타켓디렉토리를 생성한다.
    except

    end;
    DirectoryCopy(str, str2); //디렉토리 이므로 여기서 자기자신을 재귀호출한다.
    nResult := FindNext(SearchRec); //결과를 돌려준다.
    Continue;
    end;

    //아래는 찾은것이 화일일 경우 복사를 하는 부분이다.
    //완전 경로명으로 조립해 주어야 한다.
    str := Sourcedir + SearchRec.name;
    str2 := Destdir + SearchRec.name;
    StrPcopy(pstr, str);
    StrPcopy(pstr2, str2);
    //이것은 API함수이다. Parameter는
    CopyFile( pstr, pstr2, False );
    DeleteFile( pstr );
    nResult := findnext(SearchRec); //검색여부
    end; //While 문의 끝
    except
    Result := False;
    end;
    end;
    <!--CodeE-->
  • Profile
    이강석 2010.01.30 23:55
    위 코드는 디렉토리 복사입니다....아규먼트 하나 없애시고...


    str := Sourcedir + SearchRec.name;
    str2 := Destdir + SearchRec.name;
    StrPcopy(pstr, str);
    StrPcopy(pstr2, str2);
    //이것은 API함수이다. Parameter는
    CopyFile( pstr, pstr2, False );
    DeleteFile( pstr );
    nResult := findnext(SearchRec); //검색여부

    위 부분을

    str := Sourcedir + SearchRec.name;
    DeleteFile( str);

    하시면 되겠죠...

    그리고 위 함수는 재귀호출입니다..중간에 호출하는 부분 이름을 바꿔야 되겠죠..즐프



  • Profile
    띵아 2010.01.31 07:18
    오호 제가 제작 할려는 간단한 프로젝트에도 도움 되겠네요 감사
  • Profile
    SeoK™ 2010.02.03 23:40
    왜.. 전 무슨소리인지 모르겠죠? ㅋㅋ
    디렉토리 지우는 부분이 어디죠..?