프로그래밍/Win32
GetShortPathName(...)의 함정
초록생선
2009. 9. 14. 08:57
GetShortPathName(C:\Program Files\AAA\AAA BBB);
를 하면,
C:\PROGRA~1\AAA\AAA~1
이 리턴될 것으로 기대되지만, 실제로,
C:\PROGRA~1\AAA\AAA BBB
가 리턴될때가 있습니다.
이는,
http://technet.microsoft.com/en-us/library/cc959352.aspx
에 기인한 것으로, 8.3 Format Off를 사용자가 할 수 있도록 OS에서 제공하였습니다.
즉,
C:\Program Files
는 8.3 Format On일때 만들어 졌고,
C:\Program Files\AAA\AAA BBB
는 8.3 Format Off일때 만들어 졌다면,
C:\PROGRA~1\AAA\AAA BBB
가 ShortPath로 리턴될 수 있습니다.
공백 파싱으로 데이터와 Path 구별울 위해 Short Path를 쓰는 경우가 있습니다. (RunDLL32.exe)
허나, 앞의 경우와 같이 Short Path에도 공백이 가능하므로,
되도록 ShortPath의 공백 유무를 신뢰하지 맙시다.
를 하면,
C:\PROGRA~1\AAA\AAA~1
이 리턴될 것으로 기대되지만, 실제로,
C:\PROGRA~1\AAA\AAA BBB
가 리턴될때가 있습니다.
이는,
http://technet.microsoft.com/en-us/library/cc959352.aspx
에 기인한 것으로, 8.3 Format Off를 사용자가 할 수 있도록 OS에서 제공하였습니다.
즉,
C:\Program Files
는 8.3 Format On일때 만들어 졌고,
C:\Program Files\AAA\AAA BBB
는 8.3 Format Off일때 만들어 졌다면,
C:\PROGRA~1\AAA\AAA BBB
가 ShortPath로 리턴될 수 있습니다.
공백 파싱으로 데이터와 Path 구별울 위해 Short Path를 쓰는 경우가 있습니다. (RunDLL32.exe)
허나, 앞의 경우와 같이 Short Path에도 공백이 가능하므로,
되도록 ShortPath의 공백 유무를 신뢰하지 맙시다.