我一直能够用C ++读写基本的文本文件,但到目前为止还没有人讨论过更多。

我的问题是:

如果我自己开发一个文件类型供我创建的应用程序使用,我该如何将数据写入文件并保留布局,格式化等? 有没有标准,还是仅仅取决于程序员的创造力?

===============>>#1 票数:3

您基本上必须提出自己的文件格式并编写二进制数据。 您还可以序列化对象模型并将输出写入文件,但这通常效率较低。

最好使用现有数据库,或使用xml(或其他)来满足简单需求。 如果要以已存在的格式编写文件,请找到支持它的库。

===============>>#2 票数:3

您必须知道要创建的文件的二进制文件格式。 考虑Joel关于这个主题的帖子 :97-2003文件格式是349页规范。

几乎所有的时间,为了做这样的事情,你使用API​​,以避免咕噜咕噜的工作。 但是要小心,因为反复试验并通过反复试验找出“什么有用”会导致程序升级,从而破坏您的代码。 另外,您必须考虑其他操作系统,次要版本差异,补丁等。

===============>>#3 票数:2

当然有很多标准。 可能使用的是xml的一些风格,因为已经有一些库和工具可以帮助你使用它,但没有什么能阻止你发明自己的。

===============>>#4 票数:2

那么你可以用你可以阅读的格式存储数据,但是它保持了数据的完整性(例如XML或JSON)。

或者( 颤抖 )你可以想出你自己的专有二进制格式,并使用它。

===============>>#5 票数:2

你会像文本文件一样完全相同。 逐字节写入数据,以这样的方式编码,当您读取文件时,您知道您正在阅读什么。 对于电子表格应用程序,您甚至可以使用文本格式(OOXML,OpenDocument)来存储演示文稿和内容信息。

或者您可以定义二进制数据结构并将其直接写入文件。

文本或二进制格式之间的选择取决于应用程序。 对于配置文件,您可能更喜欢可以在应用程序外修改的文本文件,对于数据库,出于性能原因,您很可能会选择二进制格式。

===============>>#6 票数:1

有关各种文件类型的文件格式的信息,请参阅wotsit.org 示例:您可以确切地弄清楚如何写出.BMP文件及其组成方式。

写入数据库可以通过使用您的语言的包装类来完成,主要是传递它的SQL命令。

===============>>#7 票数:0

1985年打来电话,并表示他们对IFF有一些帮助,你愿意读一读。 交换文件格式目前仍在使用,并提供围绕二进制文件的一些基本元数据,例如RIFF或WAV音频。 (不幸的是,TIFF是一个虚假的朋友。) 据说它甚至启发了PNG,所以它不会那么糟糕。

===============>>#8 票数:0

自定义数据的典型二进制文件格式是由“索引文件格式”组成的

-------
|index|
-------
|data |
-------

索引包含“指向”数据的记录。

索引由包含偏移量和大小的记录组成。 偏移量告诉您数据存储在文件中的哪个位置,大小告诉您该偏移量处的数据大小(即要读取的字节数)。

typedef struct {
  size_t offset
  size_t size
} Index

typedef struct {
  int  ID
  char First[20]
  char Last[20]
  char *RandomInfo
} Data

假设您要在文件中存储50条记录,您将创建50个索引和50个数据结构。 首先将50个索引结构写入文件,然后是50个数据结构。

要读取您将在50个索引结构中读取的文件,然后从读入索引结构中的数据中,您可以知道“寻找”读取数据记录的位置。

查找(fopen,fread,fwrite,fclose,ftell)以查找/写入数据的函数。

(抱歉,我的分号键不起作用)

===============>>#9 票数:0

如果创建二进制文件,则可以向其写入任何文件。 唯一的缺点是你必须确切地知道它的起始位置和结束位置。

===============>>#10 票数:0

您通常使用第三方库来完成这些工作。 例如,您可以在数据库库中链接说Oracle,以便与数据库进行通信。 因为底层文件类型(即Excel电子表格与Openoffice,Oracle与MySQL等)不同,所以这些库抽象了您需要关心文件的构造方式。

希望能帮助您找到您想要的东西!

===============>>#11 票数:0

使用xml(开放,描述性和可验证的东西),并坚持使用文本。 这类事情也有标准,包括ODF

===============>>#12 票数:0

您可以将文件打开为二进制文件,而不是文本(这取决于平台的程度),从那里您可以将数据直接写入磁盘。 唯一真正需要注意的是endianess ,在将文件从一个体系结构移动到另一个体系结构(例如x86到PPC)时会出现问题。

将二进制数据写入磁盘并不比编写文本困难,实际上,您的创造力是存储数据的关键。

===============>>#13 票数:0

一般问题通常被称为应用程序状态的序列化,在您的情况下,文件的源/目标以任何对您有意义的格式。 目前,首选的输入/输出格式是XML,您可能希望查看此字段中的现有标准。 然后问题变成如何从我的系统状态映射到特定模式。 Boost有一个您可能想要查看的序列化框架。

/艾伦

===============>>#14 票数:0

您可以采用多种方法,但通常您需要某种序列化库。 BOOST :: Serialization或Google的Protocal Buffers就是这方面的一个很好的例子。 基本思想是您拥有代表数据的内存结构(类和对象),并且您希望以可用于再次重构这些结构的方式将该数据写入文件。

如果您对使用库犹豫不决,可以手动完成所有操作,但要意识到最终可能会编写大量冗余代码或开发自己的库。 请参阅fopen,fread,fwrite和fclose作为起点。

  ask by Joe Fontana translate from so

未解决问题?本站智能推荐:

1回复

XCOPY正在复制整个目录内容,而不仅仅是文件中提到的文件和文件夹

我正在尝试从目录中递归地复制一组文件和文件夹。 文件集在文本文件中列出。 这是我的脚本: 但是,当我运行脚本时,它将复制整个目录内容,包括未在文本文件中列出的文件和文件夹。 如何使用XCOPY使其工作,还是不可能?
2回复

批处理文件 - 您可以在变量中使用通配符(*或?) - 而不仅仅是文件名吗?

标题说明了一切 - 如果没有那么:有没有办法感知变量的一部分? 像这样: 基本上,如果不允许,我希望它“传感”出来。 所以基本上如果“输入”变量中有“废话”,那么它将转到“NotAllowed”。 这可能吗? 因此,如果我输入crapface或supercrapface,那么它们
3回复

如何使用Java在文本文件上写入内容?

我在java。哪个system.system中有一个程序。一些字符串,我需要将每个字符串保存在文本文件中 它以一种格式显示 ruo1 row2 row3 我想要它 ROW1 2行 ROW3 我如何在Java中做到这一点?
4回复

Python,Pandas:将DataFrame的内容写入文本文件

我有这样的熊猫DataFrame 我想以此方式将数据写入文本文件, 我已经尝试过类似的东西 但它不起作用。 这个怎么做?
1回复

将表单内容写入文本文件

我已经编写了一个代码,我想在其中获取表单的内容并将其写入文本文件。 该代码不会写入文本文件。 以下代码有什么问题?
1回复

有没有办法从不仅仅是HTML链接的网站上抓取下载文件?

因此,我将逐个浏览每个链接,以下载用于Photoshop预设的文件,至少可以说有点累。 我一直在研究实际抓取文件的方法,而不仅是HTML链接,还是从页面一次获取所有文件的某种方法,但是我没有任何运气。 我不精通python因此对我来说没有任何意义,而我安装的用于执行此操作的程序并未下载所需的
1回复

我的bone.js项目是否需要文件中的组件,或者仅仅是一个约定?

我继承了一个ribs.js项目。 该项目的约定似乎是将每个模型,视图和控制器放在其自己的文件中。 当我看本教程 ( hello bone.js )时,他们使用在一个文件中具有控制器和视图的约定。 现在,我对JavaScript的感觉是,无论它在哪里,它都将执行读者和评估者面前的所有
1回复

阅读/写作-文本文件或PostGres,请阅读更多内容

我今天已经与您联系,试图以与Java互联网阅读相关的速度来收集您的意见和经验。 首先,请让我解释一下我的情况,以便您更好地理解我提出这个问题的原因。 由于与我的业务有关的法律问题,我不能说太多,我将很快开始运作,但我会尽最大努力介绍要点。 基本上,我有一个可以运行的程序,用户可以在线上
2回复

将文本文件内容写入Java中的自定义arraylist

假设我有一个文本文件DataBase.txt ,内容如下: 和一个自定义的arraylist看起来像这样: 这是我的带有设置器,获取器和toString方法的Rows类实现: 所以。 问题是:如何将文本文件内容写入arrayList,其中每个元素都将引用到Rows类中自
2回复

在Java的特定点将内容写入文本文件

所以我想在文本文件中的特定位置编写一个字符串。 应该很容易,但这是我第一次使用BufferedWriter类。 我的资料如下: 我想使用BufferedWriter类在位置i处添加String toAdd。 我将如何跳至所需的位置并编写toAdd? 提前致谢