gpt4 book ai didi

c++ - 在 C++ 中读取和搜索二进制文件

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

在学校里,我们正在学习如何在 Visual Studio 中使用 C++ 中的二进制文件。这段代码在 Visual Studio 2005 中完美运行,但在 2010 - 2013 版本中却不行。它给出了阅读违规错误。所以我希望你们中的一个能帮助我解决这个问题,因为即使我的老师也不知道出了什么问题:(错误发生在阅读结束时。我尝试了 ifstream 和 ofstream 的不同方法,但没有成功。

我的代码:

#include <z:/Yoshi On My Mac/Google Drive/School/2013-2014/C-taal/headeryoshi.h>
#define B "z:/Yoshi On My Mac/Google Drive/city.dat"
typedef struct city {
string zip, name;
};
void add() {
ofstream file;
city city;
titelscherm("ADD CITY");
cout << "ZIP: ";
getline(cin, city.zip);
while (city.zip not_eq "0") {
cout << "Name: ";
getline(cin, city.name);

file.open(B, ios::app | ios::binary);
file.write((char*)&city, sizeof(city));
file.close();

titelscherm("ADD CITY");
cout << "POSTCODE: ";
getline(cin, city.zip);
}
cout << "city: ";
file.close();
}
void read() {
ifstream file;
city city;
titelscherm("READ CITY");
file.open(B, ios::in | ios::binary);
file.read((char*)&city, sizeof(city));
while (!file.eof()) {
cout << city.zip << " ";
cout << city.name << endl;
file.read((char*)&city, sizeof(city));
}
file.close();
_getch();
}
void search() {
string zip;
city city;
ifstream file;
bool find;

titelscherm("SEARCH ZIP");
cout << "ZIP: ";
getline(cin, zip);

file.open(B, ios::in | ios::binary);
if (!file.is_open()){
cout << "FILE ERROR";
}
else {
do {
file.read((char*)&city, sizeof(city));
find = (city.zip == zip);
} while (!file.eof() and !find);

if (find) {
cout << city.name << endl;
}
else {
cout<<" zit niet in het file" << endl;
}
}
_getch();
file.close();
}
int main() {
add();
read();
search();
return 0;
}

最佳答案

我会严重怀疑你老师的 C++ 能力。

您不能将 std::string 作为原始数据读取。它不是 POD 类型。

file.read((char*)&city, sizeof(city))
...
file.write((char*)&city, sizeof(city));

这段代码以前应该行不通,但听起来您真的很幸运。

您需要通过写入字符串的长度,然后是实际字符来序列化字符串。读的时候会先读大小,再分配存储,再读字符。

如果您想改用您的方法,请将结构中的 string 值更改为 char 数组。

关于c++ - 在 C++ 中读取和搜索二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19849229/

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