有必要将有关机器的信息写入文件,并能够补充该文件并读取一定数量的记录。从二进制文件读取时,输出为:
Automobile 1�犎�
Brand: dasf0�t�UMileage: asdf芎�
Price: asdf 芎�
Automobile 2�犎�Brand: afdsfdas0�t�U`�t�UMileage: dafs芎�
Price: fdas
(对于字段值中无意义的一组字母,我深表歉意)。据我了解,新行的转义序列在某种程度上被错误地解释了。对于录制,我使用以下功能:
void binary_write(std::ofstream& ofs, std::string& s){
ofs.write((char*)&s, sizeof(s));
}
这是我写的几行:
first_line = "Automobile " + std::to_string(count+1);
brand = "Brand: " + brand;
manufacture = "Manufacture: " + manufacture;
release = "Year of release: " + release;
mileage = "Mileage: " + mileage;
price = "Price: " + price;
阅读代码:
while(ifs.read(&temp, sizeof(char)))
std::cout << temp;
谁能建议如何使用二进制文件正确组织 I/O?提前致谢。
如果您查看 sizeof(std::string) 的大小,您会发现它是 24 或 32(取决于编译器版本,而不是字符串的长度)。而这一切都是因为字符串实际上是一个存储大小、指针和容量的类。但是如果字符串很小(通常是 15 个字符),那么数据就直接存储在里面(这就是为什么你会看到一些字符串)。
如何正确写行?有两种方法。首先是写,限制空字符。这很简单。
(看起来有一条出路,但事实并非如此)。
但是阅读这个有点困难——你必须象征性地阅读,直到找到零。
第二种方式是先写字符串的大小,再写字符串本身。很明显,在读取时,您可以读取长度并分配所需大小的缓冲区+读取这一行。
例如,看这个答案Writing and reading an object from a binary file