【发布时间】:2012-01-23 23:26:31
【问题描述】:
我想使用指针魔术来保存一个 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) 的类的数据字段(没有别的,例如静态字段)?
【问题讨论】:
-
所以你问的是 C++ 是否有任何内置的类和结构序列化机制?
-
我不认为 C++ >> 流运算符可供我使用。 @Cody,是的,只要你不是指 >
-
大多数 C++ 结构不能按位序列化,你必须使用流或类似的。
-
如果我完全错过了这个问题,请原谅我,但你不能只做 Osp::Io::File::Write(&SomeObj, sizeof(SomeObj)) 吗?希望您只是在序列化 POD 类型。
-
@JonG。是的,我就是这么想的,但现在我记得在里面也留下了
Osp::Base::String。
标签: c++ memory object-persistence