将文本和二进制数据连接到一个文件中

时间:2017-08-07 16:35:48

标签: c++ file-io binaryfiles

我正在开发一个应用程序,我有几个数据,我希望能够保存到同一个文件并从中打开。第一个是几行基本上是人类可读的,存储关于某些属性的简单数据。数据存储在支持AttributeListoperator<<的{​​{1}}个对象中。其余的是我已加载到内存中的.png图像。

如何将所有这些数据保存到一个文件中,以便我可以轻松地将其读回内存?有没有办法将图像数据存储在内存中,这将使这更容易?

1 个答案:

答案 0 :(得分:2)

  

如何以所有可能的方式将所有这些数据保存到一个文件中   容易把它读回内存?有没有办法存储图像   内存中的数据会使这更容易吗?

是。

在我曾经使用的嵌入式系统中,要求是将sysstem配置捕获到ram文件系统中。 (1兆字节)

我们使用zlib将多个文件压缩并“合并”到一个存储文件中。

也许任何压缩系统都可以为您服务。在Linux上,我会使用popen()来运行gzip或gunzip等。

更新2017-08-07

在我的popen演示中(针对此问题),我使用标准shell命令构建命令字符串:

std::string cmd;
cmd += "tar -cvf dumy514DEMO.tar dumy*V?.cc ; gzip dumy514DEMO.tar ; ls -lsa *.tar.gz";
//      tar without compression             ; next do compress

然后构造我的popen-in-a-class实例并调用popen读取操作。通常对用户的反馈很少(因为UNIX哲学的风格,即没有成功消息),因此我包括(对于此演示)-v(用于详细选项)。生成的反馈将列出的4个文件列在一起,然后列出生成的.gz文件。

dumy514V0.cc
dumy514V1.cc
dumy514V2.cc
dumy514V3.cc
8 -rw-rw-r-- 1 dmoen dmoen 7983 Aug  7 17:23 dumy514DEMO.tar.gz

dir列表中的一个片段显示了我的可执行文件,源代码和新创建的tar.gz.

-rwxrwxr-x  1 dmoen dmoen 86416 Aug  7 17:18 dumy514DEMO
-rw-rw-r--  1 dmoen dmoen 13576 Aug  7 17:18 dumy514DEMO.cc
-rw-rw-r--  1 dmoen dmoen  7983 Aug  7 17:23 dumy514DEMO.tar.gz

如您所见,tar.gz大约是8000字节。这4个文件增加了大约70,000个字节。