1

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

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

有没有办法确定文件是否为文本?

4

4 回答 4

1

您需要打开并读取数据。

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

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

在这里阅读更多:http ://en.wikipedia.org/wiki/Text_file

于 2012-08-07T08:17:06.923 回答
1

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

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

于 2012-08-07T08:42:54.720 回答
0

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

于 2012-08-07T08:12:27.123 回答
-1

尝试以下方法:

func isBinary(_ path: String) -> Bool? {
    if FileManager.default.fileExists(atPath: path) == false {
        return nil
    }

    return ( try? String(contentsOfFile: path) ) == nil
}
  1. 如果文件不存在 - 它返回 nil
  2. 如果文件存在,则返回它是二进制或文本

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

于 2021-08-11T23:49:35.897 回答