Win32 API에서 경로 최대 길이
프로그래밍 :
2009/07/28 15:37
| 대략 상황설명을 하자면.. 파일 서버가 있고 실 서버가 따로 있다. 실 서버에서는 프로그램만 돌아가고 파일 서버는 데이터 저장용으로 쓰고 있다. 그래서 네트워크 드라이브로 파일서버의 경로를 드라이브에 마운트 시키고.. 심볼릭 링크로 실 서버의 특정 디렉토리에 네트워크 드라이브의 특정 디렉토리를 링크 시켰다. 그래놓고 쓰고 있는데 어느날.............. 로그를 보다 보니 특정 파일의 접근이 실패하는 것이었다. MediaInfo 라이브러리로 동영상의 정보를 스캔하는 짓을 하는데 실패했다는 로그가 특정 파일에서 나타났던 것이다. 처음에는 동영상이 깨진 것으로 생각해서 MediaInfo 유틸리티 버전을 받아서 열어봤지만 아주 잘 나왔다. 그래서 서버 프로그램에 문제가 있나 싶어서 해당 동영상을 받아서 로컬에서 테스트 해봤는데 스캔 아주 잘 되신다....... 이건 멍미.. 그래서 이번에는 로컬에 서버에서 실패했던 파일의 경로를 그대로 만들고 그 경로에 해당 파일을 넣어서 테스트 해볼려고 디렉토리를 만들고 파일을 복사 해넣을려고 하니.. 경로가 너무 길덴다.. 대략 msdn을 찾아보니 MAX_PATH가 260이래서 실패했던 파일의 경로(파일이름포함)를 보니 약 270자가 조금 넘었다. 그래서 구글에게 물어보니 해결 했다는 사람은 한명도 안보였다. 다시 msdn을 찾아보니 유니코드 버전의 API는 최대 32k까지 된다고 해서 CreateFileW를 호출해서 해보니 되긴 된다. 단 조건이 있는데.. 경로 앞에 "\\?\"를 붙여야한다... 즉 \\?\F:\users\chadr\desktop\~~~ 이런식이어야 한다. 내참... 지금이 어느 윈도98 쓰는 시절도 아니고 파일시스템은 기본이 NTFS가 대부분인 이 시대에 경로의 최대 길이는 파일시스템에 맡기지는 왜 아스키 버전에서는 아예 안되고 유니코드 버전에서는 저런 해괴망측한 것을 앞에 붙여야지만 되는지.. API에서 막을게 아니라 에러처리는 파일시스템에게 맡기는게 훨씬 유연할 텐데 말이지.. |



DCGUI.zip





댓글을 달아 주세요