如何读取包含不同 formats/extensions 的文件?

How to read files containing different formats/extensions?

我是 c++ 的新手,我想编写一个程序来从 with/of 不同格式的文件(例如:.dat)中读取和提取数据。我只想读取并从中提取数据。有人说文件头、结构和主体,它们实际上是什么?

基本上,您需要针对每种文件格式使用不同的策略(代码)。

扩展名为 .txt 的文件通常包含 ASCII 数据,易于阅读。

扩展名为 .doc 的文件包含 MS Word 的二进制数据,几乎不可能用 MS Word 以外的其他软件阅读。

所有其他文件格式都介于这些极端之间。

文件扩展名 将为您提供有关文件内容的提示。通常人们将扩展名用作实际 文件格式 的同义词。所以我们说 "I have a .WAV file" 实际上是 "I have a binary file in RIFF/WAVE format with an .wav extension"

一些文件格式(如 .WAV .MP3 .TIFF 等)包含一个(有据可查的)header,它在前几个字节中描述了文件的结构。

所以Header的意思是:文件的前几个字节描述了文件的contents/structure/layout。例如,在 .WAV 文件的前几个字节中,您会发现通道数、采样率等,这说明了文件的其余部分需要如何读入、解释和发送到音频设备。

一些其他流行的扩展名(如 .dat .bin .hex)说的不多 "this is binary data in an unspecified format/structure." 所以你需要(很多)额外的信息才能以有意义的方式阅读这些文件。

Wikipedia article about file extensions

Wikipedia article about file formats

对于每种类型的文件,都会有一个定义格式的规范。很可能有 headers(关于存储在文件中的数据的信息)和数据结构(组织文件中实际数据的方式),其他可能只是纯文本文件,其中换行符分隔行。

要编写代码来解释文件,例如 .jpg,您需要获取 JPEG 的文件格式规范,阅读它,然后在您的代码中实现它。您可以为程序中需要读取的每种文件格式执行此操作。

图像、视频、声音、CAD 数据、文本处理等常见文件的结构和内容极其复杂。掌握它们将花费你超过一生的时间。

文件通常以签名开头,即被认为是唯一的并且可用于检查文件类型的少量字节。但是根本没有标准化。例如,MS 位图图像以字母 "BM" 开头,而 xml 内容以字符串开头,如“?xml version="1.0" encoding="UTF-8"?" .

A​​ header 是文件的初始部分,它提供有关数据本身的信息,例如数据类型和大小,允许正确解释后续数据。例如,TIFF 图像格式有一个复杂的 header,在位图数据之前可以包含数十个 "tags"。

这是一个例子。