我有一位客戶報告特定路徑中的文件存在問題。調試一些舊的Windows代碼,我發現那些失敗的代碼是對StgOpenStorage()的調用。有問題的路徑失敗了,有一個em-dash。如果我通過重命名文件來取出這個em-dash,那麼對StgOpenStorage()的調用就會成功。使用StgOpenStorage支持Windows文件路徑中的em-dash
所以我的問題是這樣的:這是這個函數的一個已知限制嗎?是否可能有其他Windows SDK功能失敗,並顯示特殊字符如em-dash?我注意到在調用這個函數之前調用了mbstowcs(),這讓我想知道這個問題是否是由於代碼頁錯誤地映射了em-dash字符。在調用之前,Visual Studio調試器中的wchar路徑看起來不錯,所以看起來很奇怪,該函數會在系統允許的路徑上失敗。
*「在調用此函數之前有一個調用mbstowcs()」* - 這幾乎肯定是問題所在,它可能轉換爲不同的UNICODE字符或根本無法轉換,然後'StgOpenStorage'可以'找到該文件。當它失敗時,你會得到什麼錯誤代碼?它是'STG_E_FILENOTFOUND'嗎? –