2015-03-25 49 views
0

我使用tinyXml將配置文件存儲在FOLDERID_RoamingAppData下,或者換言之,在C:\ Users \ USERNAME \ AppData \ Roaming下。 我用下面的序列(簡體):TiXmlDocument :: LoadFile用於非拉丁路徑名稱

  1. SHGetKnownFolderPath(FOLDERID_RoamingAppData,0,NULL,&路徑)來獲取路徑
  2. 編碼路徑UTF8
  3. 呼叫m_doc.LoadFile(路徑)// m_doc是TiXmlDocument對象
  4. 調用m_doc.Savefile()//這一個,如果用戶名非拉丁

我不知道失敗怎麼可以的LoadFile/SAVEFILE當文件名CON非拉丁文(例如希伯來文)字符。

回答

1

由於Windows API不接受UTF8編碼,因此在基於char的變量(C字符串或std::string s)中沒有便捷的方式來編碼Windows文件名。

幸運的是,TinyXml提供了另一種形式的LoadFile,接受FILE*作爲參數。您可以使用Windows _wfopen得到這樣的處理:這裏是一個片段:

SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, NULL, &path); 
FILE* xmlFile = _wfopen(path, L"r+"); 
m_doc.LoadFile(xmlFile); 

相應的功能SaveFile作品以同樣的方式 - 在這種情況下使用L"w"作爲_wfopen調用的第二個參數來覆蓋之前的版本的文件。