2009. 9. 14. 08:57

GetShortPathName(...)의 함정

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의 공백 유무를 신뢰하지 맙시다.