什么是将数据写入文件的"最佳"方法,以后再读入.

Kra*_*kos 4 c++ file-io file

将数据存储到网络上的文件的最佳方法是什么,稍后将以编程方式再次读入该文件.该程序的目标平台是Linux(Fedora),但它需要将文件写入Windows(XP)机器

这需要在C++中,会有大量的写/读事件,因此需要高效,并且需要以可以轻松读回的方式写出数据.

可能没有读回整个文件,我需要在文件中搜索特定的数据块并将其读回.

请问简单的二进制流编写器吗?我应该如何存储数据 - XML?

还有什么我需要担心的吗?


更新:澄清一下,这里是peterchen的观点的一些答案

请澄清:

*你只是附加块,还是你还需要删除/更新它们?

我只需要附加到文件的末尾,但需要搜索它并从中检索任何点

*** are all blocks of the same size?**
Run Code Online (Sandbox Code Playgroud)

不,数据的大小会有所不同 - 有些将是自由文本注释(如此处的帖子)其他将是特定的对象类数据(参数集)

*** is it necessary to be a single file?**
Run Code Online (Sandbox Code Playgroud)

不,但可取

*** by which criteria do you need to locate blocks?**
Run Code Online (Sandbox Code Playgroud)

按数据类型和时间戳.例如,如果我定期写出一组特定的参数,那么在其他数据中,比如自由文本,我想在一个日期/时间找到这些参数的值 - 所以我需要搜索时间我写出那些最接近那个日期的参数并将它们读回来.

*** must the data be readable for other applications?**
Run Code Online (Sandbox Code Playgroud)

没有.

*** do you need concurrent access?**
Run Code Online (Sandbox Code Playgroud)

是的,我可能会继续写作.但是应该一次只写一次.

*** Amount of data (per block / total) - kilo, mega, giga, tera?**
Run Code Online (Sandbox Code Playgroud)

每次写入的数据量都很低......从一些字节到一百个字节 - 总共应该看到不超过几百千字节可能是一个千兆字节.(目前还不确定)

**>如果你需要所有这些,滚动你自己将是一个挑战,我肯定会

建议使用数据库.如果您需要的数量少于此数量,请注明我们可以推荐.**

数据库会使系统复杂化,因此不幸的是这不是一个选项.

Yuv*_*l F 5

你的问题太笼统了.我首先定义我的需求,然后是文件的记录结构,然后使用文本表示来保存它.看看Eric Stone Raymond的数据元格式,JSON,也许是CSVXML.peterchen的所有观点似乎都很重要.