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 に答える