File 将更多内容写入文件而不仅仅是纯文本 我一直都能在C++中读写基本的文本文件,但是到目前为止还没有人比它讨论得多。p>

File 将更多内容写入文件而不仅仅是纯文本 我一直都能在C++中读写基本的文本文件,但是到目前为止还没有人比它讨论得多。p>,file,File,我的问题是: 如果我自己开发一种文件类型供我创建的应用程序使用,我将如何将数据写入文件并保留布局、格式等。?是否有任何标准,或者仅仅取决于程序员的创造力?如果您创建一个二进制文件,您可以将任何文件写入其中。唯一的缺点是,您必须确切地知道它从哪里开始,从哪里结束。您通常使用第三方库来实现这些功能。例如,您可以链接一个数据库库,比如说Oracle,它允许您与数据库进行对话。由于底层文件类型(即Excel电子表格与Openoffice、Oracle与MySQL等)不同,这些库将您不必关心文件的构造方式

我的问题是:


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

如果您创建一个二进制文件,您可以将任何文件写入其中。唯一的缺点是,您必须确切地知道它从哪里开始,从哪里结束。

您通常使用第三方库来实现这些功能。例如,您可以链接一个数据库库,比如说Oracle,它允许您与数据库进行对话。由于底层文件类型(即Excel电子表格与Openoffice、Oracle与MySQL等)不同,这些库将您不必关心文件的构造方式


希望这能帮你找到你想要的

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

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


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

那么,您可以将数据存储为可以读取的格式,但可以保持数据的完整性(例如XML或JSON)


或者(不寒而栗)您可以提出自己的专用二进制格式,并使用它。

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

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


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

您必须知道您尝试创建的文件的二进制文件格式。考虑:997—2003文件格式是349页规格< < /P> 几乎所有的时候,要做类似的事情,您都需要使用API来避免繁重的工作。但是要小心,因为反复试验并通过反复试验找出“什么是有效的”可能会导致程序升级破坏您的代码。此外,您还必须考虑其他操作系统、较小的版本差异、修补程序等。

有关各种文件类型的文件格式的信息,请参阅。示例:您可以准确地了解如何写出.BMP文件以及它是如何组成的


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

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

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


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

一般问题通常被称为应用程序状态的序列化,在您的情况下,使用对您有意义的任何格式的文件的源/目标。如今,首选的输入/输出格式是XML,您可能希望了解该领域的现有标准。然后问题就变成了如何从系统状态映射到特定模式。Boost有一个序列化框架,您可能想签出它


/Allan

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


如果您对使用库犹豫不决,您可以手动完成这一切,但要意识到,最终可能会编写大量冗余代码,或者开发自己的库。有关起点,请参阅。

自定义数据的典型二进制文件格式是“索引文件格式”,包括

------- |index| ------- |data | ------- ------- |索引| ------- |资料| ------- 其中索引包含指向数据的记录

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

类型定义结构{ 尺寸偏移量 大小 }索引 类型定义结构{ 整数ID 字符优先[20] 最后一个字符[20] 字符*随机信息 }资料 假设您想在文件中存储50条记录,您将创建50个索引和50个数据结构。50个索引结构将首先写入文件,然后是50个数据结构

要读取文件,您需要在50个索引结构中读取,然后从读入索引结构中的数据中,您可以知道在哪里“查找”以读取数据记录

查找(fopen、fread、fwrite、fclose、ftell)函数以读取/写入数据

(对不起,我的分号键是doe typedef struct { size_t offset size_t size } Index typedef struct { int ID char First[20] char Last[20] char *RandomInfo } Data