키워드 [Programming][VC++][Tip]
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=6499&ref=6499

질문글에 답변을 달다가.. 언뜻 스쳐지나간 MSDN 내용을 찾아서.. 올려봅니다.

현재 내가 실행시킨 프로그램이 스스로 떠 있는 상태에서 자기 자신의 실행파일을 다른 곳으로 이동하는 질문이
있어서.. 기억을 살려 보았습니다.

일반적으로 구동중인 실행파일이나.. 그런것을 지울 수는 없습니다.
공유 에러를 발생시키기 때문이죠.

근디, 윈도의 치명적인 버그인지는 몰라도 이동은 가능합니다.
(버그일까.. 아님 일부러 그렇게 가능하도록 만든 것일까.. ???? )

물론 다른 파티션이나 드라이브로의 이동은 불가능합니다.
하지만 동일한 드라이브 내에서의 이동은 가능하죠.

정확하게 확인한것은 아니지만, 메모리와 메핑되어 있는 파일의 영역은 그대로 살리고
NTFS의 링크만 이동하는것으로 짐작합니다.

즉, 탐색기 상에서는 파일이 이동한 것으로 보이지만, 링크만 바뀌었을 뿐 메핑된 파일 영역은 디스크상에
그 위치 그대로 존재하게 되는 것이겠죠.

위와 같은 동작을 하기위해서는 Window 2000 이상에서만 가능합니다...
파티션이 NTFS이어야만 하는 지는 잘 모르겠고, FAT16 or FAT32 는 실험해보지 않았습니다.

#define WINVER 0x0500
#define _WIN32_WINNT 0x0500

MoveFileEx(original path, move path, MOVEFILE_FAIL_IF_NOT_TRACKABLE);

PS. 참고로 이동할 경로에 동일한 이름을 가진 파일이 존재하면 에러 납니다..

----------------------------------------------------------------------------------------

정일호 (madness_kr)   정일호님께 메시지 보내기정일호님을 내 주소록에 추가합니다.정일호님의 개인게시판 가기 
Window 2000. FAT32 에서도 잘 되네요...

+ Recent posts