1

重複の可能性:
C# でファイルがバイナリかテキストかを判断するにはどうすればよいですか?
C# - ファイルがテキスト ベースかどうかを確認する

マルチスレッドと非同期タスクをよりよく理解するために、プロジェクト (ディレクトリ) 内のコードの合計行数をカウントする単純なアプリケーションを C# で作成しました。

現在、ファイルを開き、各ファイルの行数を数えています。ただし、これにはすべてのファイル (jpg、png、exe など) が含まれます。ファイルがテキスト ファイルかどうかを検出する方法はありますか? おそらく、ASCIIエンコーディングまたは同様のものを検出することによって。

4

3 に答える 3

2

通常、ファイルがテキストファイルであるかどうかを確実に検出することはできません。それは一般的な問題、実際には「テキストファイル」とは何かから始まります。あなたはすでにエンコーディングをほのめかしましたが、特にそれらは確実に検出することができません(例えば、メモ帳の闘争を参照してください)。

そうは言っても、ヒューリスティックを使用して最善を尽くすことができるかもしれません(もちろん、ファイル拡張子を含みますが、これらに限定されません。EXE、DLL、ZIP、画像ファイルなどのよく知られた非ファイルタイプを除き、それらの署名を認識しますブラウザやメモ帳で使用されるアプローチと組み合わせることができます)。

アプリケーションによっては、スキャンするファイルをユーザーに選択させるだけで、かなり実現可能だと思います(* .cs、*。txt、*。resx、*などの拡張子のデフォルトリストがある場合もあります)。 xml、...)。ファイル(タイプ)/拡張子がデフォルトのリストになく、ユーザーによって追加されなかった場合、それはカウントされません。ユーザーが「テキストファイル」ではないファイルタイプ/拡張子をリストに追加した場合、結果は役に立ちません。

しかし、労力と、自動結果が(すべての可能なファイルを検出する際に)100%正確になることは決してないという事実を比較すると、十分に良いはずです。

于 2011-11-30T07:20:44.257 に答える
1

JPG、PNG、EXEのテストは、バイナリかテキストかを本当に検討したい場合はコストがかかります。JPGの場合、いくつかのJPEGアルゴリズムを実行する必要があり、それはPNGにも当てはまります。そしてEXEの場合は異なります。

バイナリファイルのゼロバイトをテストする1つの方法であり、多くの場合、ファイルのゼロバイト数のスロットルパーセンテージを検討します。

私の提案は、拡張機能のみに依存することです。テキストファイルに.JPG/.PNG/.EXE拡張子が付けられるケースはごくわずかです。

このファイル拡張子を参照し、.txt、.log、.html、.php、.aspなどのテキストファイル拡張子をリストしてください。

于 2011-11-30T07:21:02.150 に答える
0

FWIW、 Internet Explorer (Windows では iow) にはMLangと呼ばれる lib があり、エンコーディング検出を備えています。おそらく、ファイルがテキストかバイナリかを単純に検出するために使用できます。

優れた C# ラッパーを次に示します。

http://www.codeproject.com/KB/recipes/DetectEncoding.aspx

とはいえ、ファイル拡張子リスト (およびおそらく署名リスト) を使用するという他の提案で十分です。

于 2011-11-30T07:33:28.213 に答える