C++ 中的 fin 是否可以处理 .doc 文件?

Does fin in C++ work with .doc files?

我用 fin 读取了一个 .doc 文件,然后将所有文本存储在一个字符串中。当我尝试打印字符串时,我只看到了未知字符。

当我将 .doc 文件的内容复制到 .txt 文件中,然后使用 fin 读取 .txt 文件时,一切正常。

我的问题是 fin 是处理复杂文件(例如 .doc)还是只处理 .txt 文件。我的 .doc 文件中只有文本(没有图形或任何东西),但字体是 Calibri,这不是 fout 用来将文本打印到 .doc 文件的字体。

如果 fin 你指的是 fistream 是的,它可以读取文件内容,但是对于复杂的文件,你必须处理文件格式,C++ 库不会自动提取文本内容。在您将文件另存为文本的情况下,这就是剩下的所有内容,因此这就是流将读取的所有内容。

fstream 默认以文本模式进行所有操作,.doc 文件使用 MS-DOC 二进制文件格式。因此,当您尝试读取 doc 文件并打印它时,它可能会显示您无法理解的字符(可能是二进制的)。

如果您尝试读取 fstream 中的任何文件,它会读取它。

我尝试使用 fstream 以二进制形式读取 .mp4 文件,它确实读取了该文件(我可以保证,因为我将读取的内容粘贴到另一个文件中,而该文件原来是同一个视频)。

因此,您的问题的答案是您可以读取 fstream 中的任何文件,但 fstream 仅以两种方式执行所有这些操作,即文本或二进制。 因此,除非您想执行诸如将文件内容复制到另一个文件之类的操作,否则仅读取任何文件都不会有太大好处。

您首先需要了解 .doc file format. Read first the doc (computing) 维基页面。它非常复杂(因此您至少需要几个月的工作)但或多或少都有记录。

您可以考虑采用不同的方法来实现您的总体目标。例如,如果您需要解析 .doc 文件(由某些 Microsoft Word software), you might use libreoffice which provides some library to parse it, or you could find another library (e.g. DocxFactory, wvware, ...), or you could use some COM Word 接口提供(在安装了 MicroSoft Word 的 Microsoft Windows 操作系统上)。

如果您的目标是生成一些文档,您可以考虑 PDF format (which is a standard), perhaps using some text formatter like LaTeX or Lout to generate it, or some library (e.g. cairo, PoDoFo,等等...)。

My question is whether fin works with complex files (such as .doc)

顺便说一句,C++ standard IO is capable of reading binary files, but you need to write your parser for them (so you need to understand precisely your file format). You should prefer open formats to proprietary formats