c++ - 字符串到二进制文件

标签 c++ string file binary

我的问题是这样的:我有一个名为“Register”的类。它有一个名为“trainName”的字符串属性及其 setter :

class Register {

 private:
    string trainName;

 public:
    string getTrainName();
};

事实上,它更长,但我想让它更简单。

在其他类(class)中,我将几个 Register 对象复制到一个二进制文件中,之前设置了 trainName。

Register auxRegister = Register();   
auxRegister.setName("name");

for(int i = 0; i < 10; i++) {

  file.write(reinterpret_cast<char*>(&auxRegister),sizeof(Register));

}

稍后,我尝试从二进制文件中检索寄存器:

Register auxRegister = Register();

while(!file.eof()) { //I kwnow this is not right. Which is the right way?

    file.read(reinterpret_cast<char*>(&auxRegister), sizeof(Register));
}

它发生它不工作。事实上,Register 确实有更多属性(它们是 int),我检索它们没问题,但字符串不是这种情况。

我做错了什么吗?在处理二进制文件和字符串时我应该考虑一些事情吗?

非常感谢。

最佳答案

std::string 类包含指向存储字符串(以及其他成员变量)的缓冲区的指针。字符串缓冲区本身不是类的一部分。所以写出类实例的内容是行不通的,因为如果你这样做的话,字符串永远不会成为你转储到文件中的内容的一部分。您需要获取指向该字符串的指针并写入它。

Register auxRegister = Register();   
auxRegister.setName("name");
auto length = auxRegister.size();

for(int i = 0; i < 10; i++) {
  file.write( auxRegister.c_str(), length );
  // You'll need to multiply length by sizeof(CharType) if you 
  // use a wstring instead of string
}

稍后,要读取字符串,您必须跟踪写入文件的字节数;或者可能从文件本身获取该信息,具体取决于文件格式。

std::unique_ptr<char[]> buffer( new char[length + 1] );
file.read( buffer, length );

buffer[length] = '\0'; // NULL terminate the string
Register auxRegister = Register();

auxRegister.setName( buffer );

关于c++ - 字符串到二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590026/

相关文章:

javascript - Node 中的原始文件名

c++ - 类型名称的概念/SFINAE 错误

c++ - 为什么要先包含相关标题?

c++ - QDialog show() 跟随返回结果 Action

string - 什么时候不修剪用户输入字符串是可以接受的?

.net - VB 不接受这些文本字符串字符

c++ - 一个 C++ 字符串可以容纳多少个字符?

vb.net - vb.net 的 file.shortpath

java - 使用 apache fileutil.copyfile 复制文件

c++ - 嵌套的 catch 运算符