IDL/Programming

FILE_COPY 및 FILE_MOVE 명령

이상우_IDL 2025. 6. 20. 15:24
728x90

IDL로 작업을 하면서 외부 파일들에 접근해야 하는 경우들은 종종 있습니다. 예를 들면, 디렉토리 내의 파일 목록을 살펴보고 특정한 파일을 읽어야 하는 경우 또는 IDL에서 파일을 생성하여 특정한 디렉토리에 저장하는 경우 또는 파일(들)을 원래 위치로부터 다른 디렉토리로 옮기는 경우 등 여러가지 경우들을 생각해볼 수 있습니다. 이와 같이 IDL에서 외부 파일 시스템에 접근하는 방법에 해당되는 기능들 몇 가지에 관해서는 예전에 관련 게시물들(링크1, 링크2, 링크3, 링크4)을 올린 바 있습니다. 오늘은 이러한 기능들 중 파일의 복제 또는 이동의 역할을 담당하는 FILE_COPY 및 FILE_MOVE 명령들에 관하여 살펴보기로 합니다.

 

먼저 FILE_COPY 명령은 파일(들)을 원래 위치에서 다른 위치로 복제하는 역할을 합니다. 반면 FILE_MOVE 명령은 파일(들)을 원래 위치에서 다른 위치로 이동시키는 역할을 합니다. 두 명령 사이의 차이는 이러한 과정에서 원래의 파일을 남겨두느냐 아니면 그렇지 않느냐의 차이입니다. 즉 FILE_COPY는 원래의 파일을 남겨두는 방식인 반면 FILE_MOVE는 원래의 파일을 남겨두지 않는 방식입니다. 마치 일반적인 편집 프로그램에서 흔히 사용하는 복사(COPY)와 자르기(CUT)의 차이와 유사하다고 보면 됩니다. 그러면 먼저 FILE_COPY 명령의 사용 예제를 보면 다음과 같습니다.

FILE_COPY, 'sample.txt', 'main.txt'

여기서는 sample.txt라는 파일을 main.txt라는 파일로 복제하라는 의미입니다. 이와 같이 원본 및 복사본에 해당되는 개체의 이름을 차례로 인수로 부여하면 됩니다. 그리고 위의 명령이 실행된 뒤에도 sample.txt라는 원본 파일은 그대로 남아있게 된다는 것을 유의해야 합니다. 그리고 목적지가 파일이 아닌 디렉토리가 될 수도 있습니다. 만약 현재 디렉토리 내에 mydir이라는 하위 디렉토리가 존재하는 상태를 가정하여 이러한 예제를 본다면 다음과 같습니다.

FILE_COPY, 'sample.txt', 'mydir'

이렇게 하면 sample.txt라는 파일을 mydir 디렉토리 안으로 복제합니다. 물론 원본 파일은 원래의 위치에 여전히 남게 됩니다. 그리고 복제된 파일의 이름까지 변경하려면 다음과 같이 하면 됩니다.

FILE_COPY, 'sample.txt', 'mydir/main.txt'

이렇게 하면 원본 파일은 sample.txt이지만 이 파일을 그대로 복제하여 mydir 디렉토리 안에서 main.txt라는 이름의 파일이 생성됩니다. 물론 두 파일은 이름만 다를 뿐 내용은 동일합니다. 그런데 mydir 디렉토리 내에 main.txt라는 파일이 이미 존재하고 있는 상태를 한번 가정해봅시다. 그런 상태에서 위와 같은 명령을 실행하게 되면 기존에 존재하던 파일과 이름이 동일한 파일을 덮어쓰는 시도가 되는데, 원래도 OS상에서 유저가 이러한 시도를 할 경우에는 경고가 뜨는 것이 정상입니다. 그런데 IDL에서 이러한 시도를 할 경우에는 기본적으로는 에러가 발생하면서 작업이 중단됩니다. 따라서 유저의 판단에 따라서는 이러한 에러 및 중단 없이 그냥 강제로 덮어쓰도록 하는 것이 필요할 수도 있습니다. 그렇게 하려면 다음과 같이 /OVERWRITE 키워드를 함께 사용하면 됩니다.

FILE_COPY, 'sample.txt', 'mydir/main.txt', /OVERWRITE

그러면 이번에는 FILE_MOVE 명령을 살펴봅시다. FILE_MOVE 명령의 기본적인 문법은 앞서 소개된 FILE_COPY 명령과 거의 유사합니다. 예제를 보면 다음과 같습니다.

FILE_MOVE, 'sample.txt', 'main.txt'

이와 같은 명령을 실행하면 sample.txt라는 파일을 main.txt라는 파일로 이동시키게 됩니다. 즉 원본인 sample.txt 파일은 사라지고 main.txt 파일로 대체됩니다. 결국은 FILE_MOVE 명령을 사용하면 그 목적지가 파일이 되든 디렉토리가 되든 상관없이 원본 파일은 제거된다는 것을 유의해야 합니다. 만약 sample.txt 파일을 mydir이라는 디렉토리로 이동시키고자 한다면 다음과 같이 하면 됩니다.

FILE_MOVE, 'sample.txt', 'mydir'

즉 이러한 명령이 실행되면 sample.txt라는 파일은 mydir 디렉토리로 옮겨지면서 원본 파일 자체는 사라지게 됩니다. 그 외에도 앞서 FILE_COPY 명령의 키워드로서 언급되었던 /OVERWRITE 키워드 역시 FILE_MOVE 명령에서도 동일한 목적으로 사용이 가능합니다.

 

그리고 FILE_COPY 및 FILE_MOVE 모두 지원하는 /ALLOW_SAME이라는 키워드도 주목할 필요가 있습니다. 원래의 파일을 동일한 이름의 파일로 복제 또는 이동하는 경우를 생각해봅시다. 먼저 FILE_COPY 명령을 사용하는 경우입니다.

 

FILE_COPY, 'sample.txt', 'sample.txt'

 

이와 같이 원래의 파일을 동일한 이름의 파일로 복제하려는 시도를 할 경우 기본적으로는 에러가 발생하면서 작업이 중단됩니다. 그런데 유저의 의도에 따라서는 에러가 발생하지 않으면서 이러한 작업이 강제로 진행되도록 해야 하는 경우도 있습니다. 그럴 경우에는 다음과 같이 /ALLOW_SAME 키워드를 사용하면 됩니다.

 

FILE_COPY, 'sample.txt', 'sample.txt', /ALLOW_SAME

 

이렇게 하면 실제로는 복제가 전혀 진행되지 않고 원래의 파일을 그냥 두면서 아무런 문제가 발생하지 않은 것으로 간주됩니다. 그러면 이번에는 FILE_MOVE 명령을 사용할 경우입니다.

 

FILE_MOVE, 'sample.txt', 'sample.txt'

 

이와 같이 원래의 파일을 동일한 이름의 파일로 이동시키려는 시도를 할 경우 역시 기본적으로는 에러가 발생하면서 작업이 중단됩니다. 하지만 이러한 작업이 에러 없이 강제로 진행되도록 해야 할 경우에는 마찬가지로 다음과 같이 /ALLOW_SAME 키워드를 함께 사용하면 됩니다.

 

FILE_MOVE, 'sample.txt', 'sample.txt', /ALLOW_SAME

 

조금 복합적인 경우를 가정해서 원래의 파일을 다른 디렉토리로 복제 또는 이동시키면서 동일한 파일명이 유지되도록 하고 싶은데, 이러한 과정에서 에러가 발생하지 않길 원하는 경우에는 /OVERWRITE 및 /ALLOW_SAME 키워드들을 모두 사용해야 할 수도 있습니다. 즉 다음과 같은 방식입니다.

 

FILE_COPY, 'sample.txt', 'sample.txt', /ALLOW_SAME, /OVERWRITE

 

FILE_MOVE, 'sample.txt', 'sample.txt', /ALLOW_SAME, /OVERWRITE

 

지금까지 FILE_COPY 및 FILE_MOVE 명령들에 관하여 살펴보았습니다. 더 자세한 내용은 IDL 도움말에서 Routines (by Topic) -> Operating System Access 섹션을 참조하시면 됩니다.

 

 

* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.

LIST