2015-03-25 68 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调用的第二个参数来覆盖之前的版本的文件。