gpt4 book ai didi

c++ - 部分写入文件 - C++

转载 作者:太空宇宙 更新时间:2023-11-04 12:17:10 25 4
gpt4 key购买 nike

我正在使用 C++ 中的 VS2010。

我有一个名为 Room 的类。 Room 有一个 x 和一个 y 属性,然后是一堆其他属性。

我有一个名为 Rooms.txt 的文件,其中包含“房间”对象的一系列属性。它使用自定义语法,因此一个条目可能如下所示:

$x$y$名称$大小$类型$状态$EOL@$

所以我得到了以下工作正常:玩家输入 X 和 Y 坐标,文本文件中相应条目的值被提供给 Room 对象。

然后我想做的是允许玩家更改其中一些变量并将它们写回文件,但我不太清楚如何操作。这是我迄今为止的最大努力:

    ifstream inRoom;
ofstream outRoom;
string path = saveRoot;
path.append(ModLoad); // the last two lines get the path for the file to be read/written

inRoom.open(path);
//outRoom.open(path);
string temp;
string temp2;
if(inRoom.bad()){
cout << "ERROR: Bad save!";
}
while(inRoom.good()){
temp2 = temp;
getline(inRoom,temp,'$');
cout << temp <<inRoom.tellg();
if ((atoi(temp2.c_str())==myPlayer.X)&&(atoi(temp.c_str())==myPlayer.Y)){
int seek = inRoom.tellg();
inRoom.close();
cout << "Opening " << path << "for writing \n";
outRoom.open(path);
outRoom.seekp(seek);
outRoom.write("HELLO!", 6);
outRoom.close();
}
}
inRoom.close();

此外,我需要覆盖值,而不是插入新数据。有什么想法吗?

最佳答案

您选择了错误的格式。要进行覆盖,您需要固定宽度格式。因此,无论如何,每个房间在您的文件中占用相同数量的字节。这样,当您覆盖一个房间时,您只需将新房间放在旧房间的顶部,而不必担心是否需要从整个文件中插入几个字节或删除几个字节。

此外,如果您有一个公式可以直接根据 x 和 y 坐标确定房间在文件中的位置,那真的会让您的生活更轻松。您不必遍历文件来寻找合适的房间,您可以立即找到合适的位置。

关于c++ - 部分写入文件 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7156801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com