【问题标题】:How can i determine if a file is binary or text?如何确定文件是二进制文件还是文本文件?
【发布时间】:2012-08-04 05:09:46
【问题描述】:

我正在编写一个应用程序,我需要确定用户提供的文件是否为文本,因为我正在其中执行搜索。

我不是基于扩展名,因为我还想搜索源代码文件,或者任何其他具有文本内容的文件(即使是不知名的扩展名)。

有没有办法判断文件是否为文本?

【问题讨论】:

    标签: objective-c xcode macos encoding mime-types


    【解决方案1】:

    没有办法确定。但请注意,大多数控制字符 不会出现在 ASCII 文件中。 您可以通过制作大部分 ASCII 的子集来做出很好的猜测 控制字符。然后计算文件中的字符数 在子集中,ASCII 文件的计数应为零。 但归根结底你必须证明一个否定的,这是一个麻烦 要做的事情。

    【讨论】:

      【解决方案2】:

      您需要打开并读取数据。

      对于 ASCII 文本文件,这意味着检查字符是否在可打印范围内。

      对于 UTF 文本文件,您可能需要先读取 BOM(字节顺序标记)以确定编码,然后再读取文件的其余部分。

      在此处阅读更多信息:http://en.wikipedia.org/wiki/Text_file

      【讨论】:

        【解决方案3】:

        感谢大家提供的解决方案! 我刚刚找到了一个似乎可以很好地完成这项工作的框架!

        我在这里留下一个链接供参考:https://github.com/aidansteele/MagicKit

        【讨论】:

          【解决方案4】:

          试试下面的方法:

          func isBinary(_ path: String) -> Bool? {
              if FileManager.default.fileExists(atPath: path) == false {
                  return nil
              }
          
              return ( try? String(contentsOfFile: path) ) == nil
          }
          
          1. 如果文件不存在 - 返回 nil
          2. 如果文件存在,则返回二进制或文本

          此代码的问题是它不适用于大文件(检查会很长)

          【讨论】:

          • 问题被标记:[objective-c]
          猜你喜欢
          • 2012-05-31
          • 1970-01-01
          • 2010-10-28
          • 1970-01-01
          • 1970-01-01
          • 2013-01-15
          • 2012-04-30
          • 1970-01-01
          • 2012-02-05
          相关资源
          最近更新 更多