Q&A

  • [API] File Move, Copy, Paste, Delete....
안녕하세요.. 오늘은 질문을 많이 올리네요^^

Project 기한이 다 되어가는지^^

아무튼...^^





Sol>

이동 - MoveFile()

ex. MoveFile(PChar('C:zzztest.txt'), PChar('C:zzzmovetest.txt'));



삭제 - DeleteFile()

ex. DeleteFile(PChar('C:zzztest.txt'));



복사 - CopyFile()

마지막 인자가 False 일경우 화일이 존재할때 덮어쓴다

ex. CopyFile(PChar('C:zzztest.txt'), PChar('C:zzzcopytest.txt'), False);



는 아는데요.... 이것을 응용한 것을 알고 싶습니다.^^

메뉴에 이것을 넣으려고 합니다.

그러므로 file을 지정한 후 Copy를 선택한 후...

지정 장소에 넣어야 하는데..(Paste)해야 하느데.... 어떻게 해야 하나요?



읽어 주셔서 감사합니다.

- 델초보 RyanYun -



2  COMMENTS
  • Profile
    김주석 1999.12.17 04:17
    RyanYun wrote:

    > 안녕하세요.. 오늘은 질문을 많이 올리네요^^

    > Project 기한이 다 되어가는지^^

    > 아무튼...^^

    >

    >

    > Sol>

    > 이동 - MoveFile()

    > ex. MoveFile(PChar('C:zzztest.txt'), PChar('C:zzzmovetest.txt'));

    >

    > 삭제 - DeleteFile()

    > ex. DeleteFile(PChar('C:zzztest.txt'));

    >

    > 복사 - CopyFile()

    > 마지막 인자가 False 일경우 화일이 존재할때 덮어쓴다

    > ex. CopyFile(PChar('C:zzztest.txt'), PChar('C:zzzcopytest.txt'), False);

    >

    > 는 아는데요.... 이것을 응용한 것을 알고 싶습니다.^^

    > 메뉴에 이것을 넣으려고 합니다.

    > 그러므로 file을 지정한 후 Copy를 선택한 후...

    > 지정 장소에 넣어야 하는데..(Paste)해야 하느데.... 어떻게 해야 하나요?

    >

    > 읽어 주셔서 감사합니다.

    > - 델초보 RyanYun -



    일반적인 윈도우 탐색기 기능을 구현하도록 하면 되겠죠??

    즉 ,

    복사하기 + 붙이기 => 복사

    잘라내기 + 붙이기 => 이동

    마침 전에 짜두었던 소스가 있네요.. 참고하세요..



    procedure Tfrm_064.N_copy_fil_p3Click(Sender: TObject);

    var

    i , copy_count : Integer ;

    i_pos : Integer ;



    begin

    // 1. 내컴퓨터의 파일을 복사 혹은 잘라내기할 목록을 만든다

    // 복사할 리스트만 간직한다



    if fil_p3.SelCount = 0 then

    begin

    Application.MessageBox( '복사할 파일을 먼저 선택하십시요 '

    , ' 알림 ' , MB_OK) ;

    SET_POPUP_ITEM_ENABLE ( Pop_fil_p3) ;

    exit ;

    end ;

    for i_pos := 0 to Pop_fil_p3.Items.Count - 1 do

    begin

    if (Pop_fil_p3.Items[i_pos].GetNamePath = 'N_paste_fil_p3') or

    (Pop_fil_p3.Items[i_pos].GetNamePath = 'N_fresh_fil_p3') or

    (Pop_fil_p3.Items[i_pos].GetNamePath = 'N_copy_fil_p3') then

    begin

    Pop_fil_p3.Items[i_pos].Enabled := True ;

    end

    else

    begin

    Pop_fil_p3.Items[i_pos].Enabled := False ;

    end ;



    end ;

    GP_CLIENT_COPYFILE_LIST ( fil_p3 , copy_list , copy_file_list ) ;

    // 복사할 리스트를 간직한다





    procedure GP_CLIENT_COPYFILE_LIST ( VAR FIL : TFILELISTBOX ;

    VAR COPY_LIST : TSTRINGS ;

    VAR COPY_FILE_LIST : TSTRINGS ) ;

    // client file-copy lists

    var

    i , copy_count : Integer ;

    i_pos : Integer ;

    begin



    COPY_LIST.Clear ;

    // list를 지운다

    COPY_FILE_LIST.Clear ;

    copy_count := 0 ;

    for i := 0 to FIL.Items.Count - 1 do

    begin

    if FIL.Selected[i] then

    begin

    if Copy( FIL.Directory ,

    Length(FIL.Directory),

    1) = '' then

    begin

    COPY_LIST.Add(FIL.Directory + FIL.Items.Strings[i] ) ;

    end

    else

    begin

    COPY_LIST.Add(FIL.Directory + '' + FIL.Items.Strings[i] ) ;

    end ;



    COPY_FILE_LIST.Add(FIL.Items.Strings[i]) ;

    FIL.Selected[i] := False ;

    end ;

    end ;

    end ;



    procedure Tfrm_064.N_cut_fil_p3Click(Sender: TObject);

    var

    i , cut_count : Integer ;

    i_pos : Integer ;

    begin

    // 1. 내컴퓨터의 파일을 복사 혹은 잘라내기할 목록을 만든다

    // 복사할 리스트만 간직한다





    if fil_p3.SelCount = 0 then

    begin

    Application.MessageBox( '잘라내기할 파일을 먼저 선택하십시요 '

    , ' 알림 ' , MB_OK) ;

    SET_POPUP_ITEM_ENABLE ( Pop_fil_p3 ) ;

    exit ;

    end ;



    for i_pos := 0 to Pop_fil_p3.Items.Count - 1 do

    begin

    if (Pop_fil_p3.Items[i_pos].GetNamePath = 'N_paste_fil_p3') or

    (Pop_fil_p3.Items[i_pos].GetNamePath = 'N_fresh_fil_p3') or

    (Pop_fil_p3.Items[i_pos].GetNamePath = 'N_cut_fil_p3') then

    begin

    Pop_fil_p3.Items[i_pos].Enabled := True ;

    end

    else

    begin

    Pop_fil_p3.Items[i_pos].Enabled := False ;

    end ;



    end ;



    GP_CLIENT_COPYFILE_LIST ( fil_p3 , copy_list , copy_file_list ) ;



    end;





    procedure Tfrm_064.N_paste_fil_p3Click(Sender: TObject);

    var

    i_pos , i : Integer ;

    begin

    // 1. 내컴퓨터의 파일을 복사 혹은 잘라내기한다

    // 팝업메뉴중 잘라내기가 활성화되어 있다면

    // 파일의 이동으로 처리한다

    // 팝업메뉴중 복사내기가 활성화되어 있다면

    // 파일의 복사로 처리한다



    if (copy_list.Count = 0) then

    begin

    Application.MessageBox ('선택한 파일이 없습니다' , '알림' , MB_OK ) ;

    exit ;

    end ;



    for i_pos := 0 to Pop_fil_p3.Items.Count - 1 do

    begin

    if (Pop_fil_p3.Items[i_pos].GetNamePath = 'N_cut_fil_p3') then

    begin

    if Pop_fil_p3.Items[i_pos].Enabled then

    // 잘라내기가 활성화되어 있다면

    begin

    GP_CLIENT_MOVE_FILE ( fil_p3 , copy_list , copy_file_list ) ;

    //SET_MOVEFILE ;

    // 처리하기

    end ;

    end

    else if (Pop_fil_p3.Items[i_pos].GetNamePath = 'N_copy_fil_p3') then

    begin

    if Pop_fil_p3.Items[i_pos].Enabled then

    // 복사하기가 활성화되어 있다면

    begin

    GP_CLIENT_COPY_FILE ( fil_p3 , copy_list , copy_file_list ) ;

    // 처리하기

    end ;

    end ;



    end ;



    for i := 0 to Pop_fil_p3.Items.Count - 1 do

    // 원상태로 enable

    begin

    Pop_fil_p3.Items[i].Enabled := True ;

    end ;



    end;





    procedure GP_CLIENT_COPY_FILE ( VAR FIL : TFILELISTBOX ;

    VAR COPY_LIST : TSTRINGS ;

    VAR COPY_FILE_LIST : TSTRINGS ) ;

    // client files move

    var

    i : Integer ;

    begin

    for i := 0 to (COPY_LIST.Count - 1) do

    begin

    Try

    if Copy( FIL.Directory ,

    Length(FIL.Directory),

    1) = '' then

    begin

    CopyFile(PChar( COPY_LIST.Strings[i])

    , PChar( FIL.directory + COPY_FILE_LIST.Strings[i]) , False );



    end

    else

    begin

    CopyFile(PChar( COPY_LIST.Strings[i])

    , PChar( FIL.directory + '' + COPY_FILE_LIST.Strings[i]) , False );

    end ;

    Except

    On E:EXCEPTION do

    Application.MessageBox ( ' 파일복사에 실패했습니다 ' +chr(13) + chr(13) +

    ' 다시 시도하십시요 ' , ' 알림 ' , MB_OK ) ;

    End ;

    end ;



    FIL.Update ;

    end ;



    procedure GP_CLIENT_MOVE_FILE ( VAR FIL : TFILELISTBOX ;

    VAR COPY_LIST : TSTRINGS ;

    VAR COPY_FILE_LIST : TSTRINGS ) ;

    // client files copy

    var

    i : Integer ;

    begin

    for i := 0 to (COPY_LIST.Count - 1) do

    begin

    Try

    if Copy( FIL.Directory ,

    Length(FIL.Directory),

    1) = '' then

    begin

    MoveFile(PChar( COPY_LIST.Strings[i] )

    , PChar( FIL.directory + COPY_FILE_LIST.Strings[i]));

    end

    else

    begin

    MoveFile(PChar( COPY_LIST.Strings[i] )

    , PChar( FIL.directory + '' + COPY_FILE_LIST.Strings[i]));

    end ;

    Except

    On E:EXCEPTION do

    Application.MessageBox ( ' 파일이동에 실패했습니다 ' +chr(13) + chr(13) +

    ' 다시 시도하십시요 ' , ' 알림 ' , MB_OK ) ;

    End ;

    end ;



    FIL.Update ;

    end ;





  • Profile
    구창민 1999.12.17 03:56
    RyanYun wrote:

    > 안녕하세요.. 오늘은 질문을 많이 올리네요^^

    > Project 기한이 다 되어가는지^^

    > 아무튼...^^

    >

    >

    > Sol>

    > 이동 - MoveFile()

    > ex. MoveFile(PChar('C:zzztest.txt'), PChar('C:zzzmovetest.txt'));

    >

    > 삭제 - DeleteFile()

    > ex. DeleteFile(PChar('C:zzztest.txt'));

    >

    > 복사 - CopyFile()

    > 마지막 인자가 False 일경우 화일이 존재할때 덮어쓴다

    > ex. CopyFile(PChar('C:zzztest.txt'), PChar('C:zzzcopytest.txt'), False);

    >

    > 는 아는데요.... 이것을 응용한 것을 알고 싶습니다.^^

    > 메뉴에 이것을 넣으려고 합니다.

    > 그러므로 file을 지정한 후 Copy를 선택한 후...

    > 지정 장소에 넣어야 하는데..(Paste)해야 하느데.... 어떻게 해야 하나요?

    >

    > 읽어 주셔서 감사합니다.

    > - 델초보 RyanYun -

    >



    시각적이냐, 비시각적이냐의 차이겠지요.

    결국 복사할 파일명과 복사될 파일명으로 작업이

    이루어 지게 될텐데요.

    가장 쉽고 간단한 것은 복사할 곳과 복사될 곳을

    사용자에게 입력하게 만드는 것이구,

    좀더 나은 인터페이스는 파일열기 대화상자에서 선택한다거나,

    하는 것이겠구요, 아니면 직접 Explorer처럼 드래그 드롭, 팝업메뉴..등등..

    으로 작업하는 방법이 있겠지요.

    역시 좀더 나은 인터페이스를 구현하려면 손이 많이 갑니다.

    다음에 또 이런 작업을 할 예상이 된다면

    자주 쓸수 있도록 모듈을 작성해 두시는 편이 좋겠죠..

    그럼, 즐거운 프로그래밍이 되시길~