Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
倾销c++;结构到文本文件 如何将C++中的结构内容写入文本文件?我想做的是,假设我有一个名为a的结构,其中包含数据成员a.one、a.two等等,我想把它们逐行写入一个文本文件,如下所示_C++_Logging_File Io - Fatal编程技术网

倾销c++;结构到文本文件 如何将C++中的结构内容写入文本文件?我想做的是,假设我有一个名为a的结构,其中包含数据成员a.one、a.two等等,我想把它们逐行写入一个文本文件,如下所示

倾销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
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) );