C++ Can';t在windows应用商店应用程序8.1中使用fstream创建文件
我正在使用direct3D 11.1创建我的游戏,我想将玩家的最后一条记录存储在一个文件中,下面是我的代码:(在!file.good()中失败) 下面是要写入文件的XMLWriter类:C++ Can';t在windows应用商店应用程序8.1中使用fstream创建文件,c++,windows-store-apps,direct3d11,C++,Windows Store Apps,Direct3d11,我正在使用direct3D 11.1创建我的游戏,我想将玩家的最后一条记录存储在一个文件中,下面是我的代码:(在!file.good()中失败) 下面是要写入文件的XMLWriter类: class XmlWriter { public: void Write(string const &replace, string const &replaceBy, fstream &file) { fstream tempFile;
class XmlWriter
{
public:
void Write(string const &replace, string const &replaceBy, fstream &file)
{
fstream tempFile;
tempFile.open("ScoreT.xml", fstream::out | fstream::trunc | ios::app);
if (!tempFile)
{
return;
}
string curLine = "";
while (!file.eof())
{
getline(file, curLine);
if (findWord(replace, curLine))
{
int j = 0;
while (curLine[j] != replace[0])
{
j++;
}
j += replace.size() + 1;
for (int k = 0; k < replaceBy.size(); k++)
{
curLine[j] = replaceBy[k];
j++;
}
if (curLine[j] != ',' && curLine[j] != '<')
{
curLine[j] = ' ';
}
tempFile << curLine << "\n";
}
else
{
string temp = "";
file << temp;
tempFile << curLine << "\n";
}
}
file.close();
tempFile.close();
if (remove("Setting.xml") != 0) perror("Error removing file!");
rename("ScoreT.xml", "Score.xml");
}
private:
bool findWord(string search, string searchLine)
{
bool ret = false;
for (int i = 0, j = 0; i < searchLine.size() && j<search.size(); i++)
{
if (search[j] == searchLine[i])
{
ret = true;
j++;
continue;
}
ret = false;
j = 0;
}
return ret;
}
};
classxmlwriter
{
公众:
无效写入(字符串常量和替换、字符串常量和替换、fstream和文件)
{
fstream临时文件;
open(“ScoreT.xml”,fstream::out | fstream::trunc | ios::app);
如果(!tempFile)
{
返回;
}
字符串卷曲=”;
而(!file.eof())
{
getline(文件、卷曲线);
if(findWord(替换,卷曲线))
{
int j=0;
while(curLine[j]!=替换[0])
{
j++;
}
j+=替换尺寸()+1;
对于(int k=0;k 如果(curLine[j]!='、'&&curLine[j]!='商店应用程序只允许对少数文件路径进行写访问。通过调用fstream::open
,而不使用完全限定路径,API将使用工作目录,在商店应用程序的情况下,工作目录始终是应用程序包路径(应用程序没有写访问权限的路径)
解决方案是使用应用程序具有写入权限的完全限定路径。要保存玩家数据,最好使用ApplicationData::Current->RoamingFolder
文件夹,使用path
属性获取完整路径,并将文件名附加到字符串中。然后传递完全限定的文件路径字符串到fstream::open
,它应该会成功
class XmlWriter
{
public:
void Write(string const &replace, string const &replaceBy, fstream &file)
{
fstream tempFile;
tempFile.open("ScoreT.xml", fstream::out | fstream::trunc | ios::app);
if (!tempFile)
{
return;
}
string curLine = "";
while (!file.eof())
{
getline(file, curLine);
if (findWord(replace, curLine))
{
int j = 0;
while (curLine[j] != replace[0])
{
j++;
}
j += replace.size() + 1;
for (int k = 0; k < replaceBy.size(); k++)
{
curLine[j] = replaceBy[k];
j++;
}
if (curLine[j] != ',' && curLine[j] != '<')
{
curLine[j] = ' ';
}
tempFile << curLine << "\n";
}
else
{
string temp = "";
file << temp;
tempFile << curLine << "\n";
}
}
file.close();
tempFile.close();
if (remove("Setting.xml") != 0) perror("Error removing file!");
rename("ScoreT.xml", "Score.xml");
}
private:
bool findWord(string search, string searchLine)
{
bool ret = false;
for (int i = 0, j = 0; i < searchLine.size() && j<search.size(); i++)
{
if (search[j] == searchLine[i])
{
ret = true;
j++;
continue;
}
ret = false;
j = 0;
}
return ret;
}
};