倾销c++;结构到文本文件 如何将C++中的结构内容写入文本文件?我想做的是,假设我有一个名为a的结构,其中包含数据成员a.one、a.two等等,我想把它们逐行写入一个文本文件,如下所示
结构A倾销c++;结构到文本文件 如何将C++中的结构内容写入文本文件?我想做的是,假设我有一个名为a的结构,其中包含数据成员a.one、a.two等等,我想把它们逐行写入一个文本文件,如下所示,c++,logging,file-io,C++,Logging,File Io,结构A A.one=值 A.2=价值 结构B B.one=值 B.2=价值 基本上我想做个垃圾场。。有没有一个简单的方法可以做到这一点?最好的I/O方法是什么?文件?iostream?谢谢是否有更简单的方法来转储类的成员数据的所有值 编辑:废话,谢谢你们 C++并不内省。也就是说,它对其结构的内容一无所知。要做到这一点,您必须使用某种手动注释或反射系统 当然,如果您对结构的硬编码信息没有问题,那么可以使用任何I/O方法转储信息 例如: struct A { int member1;
A.one=值
A.2=价值 结构B
B.one=值
B.2=价值 基本上我想做个垃圾场。。有没有一个简单的方法可以做到这一点?最好的I/O方法是什么?文件?iostream?谢谢是否有更简单的方法来转储类的成员数据的所有值
编辑:废话,谢谢你们 C++并不内省。也就是说,它对其结构的内容一无所知。要做到这一点,您必须使用某种手动注释或反射系统 当然,如果您对结构的硬编码信息没有问题,那么可以使用任何I/O方法转储信息 例如:
struct A
{
int member1;
char member2;
};
void PrintA (const A& a)
{
std::printf ("member1: %d\n", a.member1);
std::printf ("member2: %c\n", b.member2);
}
正如您所看到的,这是乏味的,因为它需要对结构有深入的了解,并且在结构发生更改时不会自动更新。但是反射系统的“正确”的开销可能是一个缺点,尤其是如果你在学习。 < P>没有C++中的反射,所以你必须手动完成,例如(使用IoSoto,为简单):
dump_A(标准::cout,“A”,A);
void dump_A(std::iostream&os,const char*name,const&A)
{
OS这比C++更适用于C,但请记住,如果您直接将结构写入文件(或网络缓冲区)然后,结果将依赖于计算机和编译器。整数将按主机字节顺序写入,并且还将包括结构的编译器填充字节。尝试在具有不同endianness或不同编译器指令的计算机上读取缓冲区将不起作用
<>这是发生在(C++语法)上的:写(f,a,a sioof(a));我在Boost序列化库中取得了成功。它易于使用,是C++数据结构的序列化和反序列化的自然选择。
以下是本教程的链接:
如果这只是一个结构,一个简单的旧C兼容数据类型,没有虚拟方法和指针,那么作为短期的乱码,你可以使用:
struct Foo { int a, b; char c, d, e[50]; } f;
write( fd, & f, sizeof(f) );
但是,不要期望这是跨平台的,甚至是同一平台上的跨编译器版本
< /P>也许C++标准I/O类的使用会更安全吗?如果MyMe1和MeMe2的类型会发生变化,那么你的代码将工作不正确。我不喜欢C++流IO作为一个优先选择。你是对的,在这种情况下它会稍微安全一些,但是关键是代码需要仔细的更新以保持同步。结构定义,无论您喜欢哪种IO方案,它都是正确的。写入时fd是什么意思(fd…)?这是文件句柄吗?其中有一些指针..=/fd==文件描述符,从open()获得。如果您使用的是文件*(从fopen),则可以使用fwrite()。相关:**
struct Foo { int a, b; char c, d, e[50]; } f;
write( fd, & f, sizeof(f) );