我使用tinyXml将配置文件存储在FOLDRID_RoamingAppData下,或者换句话说,存储在C:\Users\USERNAME\AppData\Roaming下。我使用以下序列(简化):
- SHGetKnownFolderPath(FOLDERID_RoamingAppData,0,NULL,&path)以获取路径
- 将路径编码为UTF8
- 调用m_doc。LoadFile(路径)//m_doc是TiXmlDocument对象
- call m_doc.Savefile()//如果用户名为非拉丁文,则此操作失败
当文件名包含非拉丁字符(如希伯来语)时,我想知道如何加载文件/保存文件。
由于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
调用的第二个参数来覆盖文件的先前版本。