2012-11-17 75 views
0

我在msdn中使用了這段代碼(Obtaining a file name from a file handle)以獲取從findfirstchangenotification獲得的文件句柄的文件名。「從文件句柄中獲取文件名」的錯誤編碼

但現在的問題是,結果字符串的編碼是某種程度上錯誤的。我只看到一個字符而不是所有字符(通常是一個問號)。

所以我的代碼調用GetMappedFileName,並得到問號。

if (GetMappedFileName (GetCurrentProcess(), 
         pMem, 
         pszFilename, 
         MAX_PATH)) 

爲什麼?

+0

只看到一個字符是將char *字符串轉換爲wchar_t *字符串的肯定符號。這些類型只能讓你關閉編譯器,試圖告訴你,你做錯了。不要強制使用Unicode。 –

+0

這是一個完美的問題。 – bmargulies

回答

2

您正在調用GetMappedFileName的「A」形式,它只能在當前的ACP中提供字符。你的文件名有不在當前ACP中的字符,所以他們會轉向問號。

如果文件名包含在當前ACP中沒有表示形式的Unicode字符,您將收到問號。您應該調用API的'W'形式來獲取文件名的Unicode形式,然後決定您想要如何處理它。