0

我想使用指针 magikry 使用以下将字节数据写入文件的方法保存 C++ 类:

result Osp::Io::File::Write (const void *buffer, int length);
  • 参数:

    • buffer— 指向包含要写入的字节数据的用户提供缓冲区的指针
    • length— 缓冲区长度(以字节为单位)
  • 例外:

    • E_SUCCESS— 方法成功。
    • E_INVALID_STATE— 文件尚未打开。
    • E_ILLEGAL_ACCESS— 未打开文件进行写操作,或因权限不足而拒绝访问。
    • E_INVALID_ARG— 出现以下任一情况:
      • 指定的缓冲区包含一个空指针。
      • 指定的缓冲区长度等于或小于 0。
      • 文件句柄无效(文件被其他方法关闭,或者内存损坏)。
    • E_STORAGE_FULL— 磁盘空间已满。
    • E_IO— 由于突然弹出媒体或检测到文件损坏,发生意外的设备故障。

我不想假设会有任何类型的缓冲,尽管我相信每个字节不会导致整个闪存块被重写,但我想知道是否有更好的方法来写入所有数据字段一个类(没有别的,例如静态字段),例如,一个指向对象(*this)的指针?

4

1 回答 1

2

在 C++ 中,您不会将“原始”对象写入文件,而是将它们序列化。没有魔法,您需要自己编写序列化代码(为方便起见,重载运算符<<>>)。

您可以通过仅转储内存来实现旧的 C 风格,但是除了这通常会导致 C 的问题(对齐、系统之间传输数据时的字节序问题)之外,您还会遇到 C++ 引入的问题(内部类表示,可能的“隐藏”数据成员,例如 v-table 等)。

如果您想确保读取和写入可以在不同系统和/或不同软件之间传输的可靠数据 - 您最好实现序列化,并且不要寻找捷径。

您可以为此使用Boost.Serialization 之类的库。

于 2012-01-23T23:36:19.933 回答