【问题标题】:Does fin in C++ work with .doc files?C++ 中的 fin 是否适用于 .doc 文件?
【发布时间】:2018-06-09 16:37:52
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么需要读取.doc 文件?你打算用它做什么?您需要从中提取哪些确切信息?请编辑您的问题以改进它

标签: c++ input file-io inputstream .doc


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      你首先需要了解.docfile format。首先阅读doc (computing) wikipage。它非常复杂(因此您至少需要几个月的工作),但或多或​​少都有记录。

      您可以考虑采用不同的方法来实现您的总体目标。例如,如果你需要解析一个.doc文件(由一些Microsoft Word软件提供),你可以使用libreoffice,它提供了一些库来解析它,或者你可以找到另一个库(例如DocxFactory,@ 987654326@, ...),或者您可以使用一些 COM 接口连接到 Word(在安装了 Microsoft Word 的 Microsoft Windows 操作系统上)。

      如果您的目标是生成一些文档,您可能会考虑使用PDF 格式(这是一个标准),可能使用一些text formatterLaTeXLout 来生成它,或者一些库(例如cairoPoDoFo 等...)。

      我的问题是 fin 是否适用于复杂文件(例如 .doc)

      顺便说一句,C++ standard IO 能够读取二进制文件,但您需要为它们编写您的 parser(因此您需要准确了解您的文件格式)。你应该更喜欢open formats 而不是proprietary formats

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        • 2011-09-30
        • 2012-11-01
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多