非拉丁路径名的TiXmlDocument::LoadFile



我使用tinyXml将配置文件存储在FOLDRID_RoamingAppData下,或者换句话说,存储在C:\Users\USERNAME\AppData\Roaming下。我使用以下序列(简化):

  1. SHGetKnownFolderPath(FOLDERID_RoamingAppData,0,NULL,&path)以获取路径
  2. 将路径编码为UTF8
  3. 调用m_doc。LoadFile(路径)//m_doc是TiXmlDocument对象
  4. call m_doc.Savefile()//如果用户名为非拉丁文,则此操作失败

当文件名包含非拉丁字符(如希伯来语)时,我想知道如何加载文件/保存文件。

由于Windows API不接受UTF8编码,因此无法在基于char的变量(C字符串或std::strings)中移植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调用的第二个参数来覆盖文件的先前版本。

相关内容

  • 没有找到相关文章

最新更新