2
파일 경로에서 GetShortNameW()를 사용하여 짧은 이름을 가져온 다음 나중에 긴 이름보기 GetLongNameA()를 검색하는 코드가 있습니다.Windows에서 긴 파일 이름 대 긴 파일 이름
원본 파일 단락의 변환에 따라
"C:/ProgramData/My Folder/File.ext"
그러나 형식이다, 다시 길이로, 파일명 짧은 이름 형식이다
"C:/Program Files/My Folder/Filename.ext".
된다
"C:/PROGRA~2/MY_FOL~1/FIL~1.EXT"
짧은 이름을 잘못 해석했습니다.
코드는 (내가 VS2008의 프로젝트를 업그레이드 할 수 없습니다)
아무도 이런 일이 될 수있는 이유는 어떤 생각을 가지고 있습니까 Windows 7에서 VS 2005를 사용하여 컴파일?
DWORD pathLengthNeeded = ::GetShortPathNameW(aRef->GetFilePath().c_str(), NULL, 0);
if(pathLengthNeeded != 0)
{
WCHAR* shortPath = new WCHAR[pathLengthNeeded];
DWORD newPathNameLength = ::GetShortPathNameW(aRef->GetFilePath().c_str(), shortPath, pathLengthNeeded);
if(newPathNameLength != 0)
{
UI_STRING unicodePath(shortPath);
std::string asciiPath = StringFromUserString(unicodePath);
pathLengthNeeded = ::GetLongPathNameA(asciiPath.c_str(),NULL, 0);
if(pathLengthNeeded != 0)
{// convert it back to a long path if possible. For goodness sake can't we use Unicode throughout?F
char* longPath = new char[pathLengthNeeded];
DWORD newPathNameLength = ::GetLongPathNameA(asciiPath.c_str(), longPath, pathLengthNeeded);
if(newPathNameLength != 0)
{
std::string longPathString(longPath, newPathNameLength);
asciiPath = longPathString;
}
delete [] longPath;
}
SetFullPathName(asciiPath);
}
delete [] shortPath;
}
해당 파일이 들어있는 디렉토리에 대해'dir/x'의 출력은 무엇입니까? –
GetShortPathName - C : \ ProgramData \ ...이 C : \ PROGRA ~ 2 \ ...에 매핑되고 C : \ Program Files \ ...이 C : \ PROGRA ~로 매핑되는 짧은 이름과 일치합니다. 1 \ ... 프로그래밍 방식으로 GetLongPathName을 통해 짧은 이름을 긴 이름으로 다시 변환하면 잘못 해석되는 것 같습니다. –