2011-01-20 8 views
2

多くのファイルを読み込んで、特定のテキストを検索する必要があります。私はテキストファイル、つまり画像、ムービーなどのファイルを開こうとしません。私は非テキストファイルを識別する方法を探しています。 FileStreamを使用してバイト検索を行うので、小数点の値が128より大きいバイトが検出された場合、ファイルの読み込みとクローズをやめることができます。これは良いアプローチのようですか?ファイルがCのテキストファイルでないかどうかを検出する方法#

+1

あなたは拡張子でファイルをフィルタすることはできますか? – Alex

+0

は拡張機能ですか? .txt、.docなど? – WernerCD

+0

あなたのユーザーは、中国語のように見えるときは簡単にテキストファイルではないことを伝えることができます。メッセージボックスに[はい/いいえ]を入力します。 –

答えて

3

これには絶対的な答えはありません。テキストファイルがASCII文字(かつASCII、UTF-8などでエンコードされている)であることがわかっている場合、それは動作します... すべてテキスト以外のファイルをキャッチできません。しかし

  • それはまだいくつかの形式の有効なバイナリファイルであるファイルのために失敗したが、いずれも含まないことが起こる可能性があり、非ASCIIテキスト
  • を使用して、任意のテキストファイルのため失敗します。 128より大きい値。

バイトシーケンス{34,87,23,10}は、テキストまたはバイナリデータを表しますか?確かに知る方法はない。 何でもあなたはヒューリスティックになります。

+0

ファイルがプレーンなASCIIテキストでない場合、ファイルを失格としたい。フォルダ内のファイルは何でもかまいません。オープンするファイルの種類について高度な知識はありません。拡張子は信頼できません。ムービーファイルの拡張子は.txtです。 ASCII以外の文字に遭遇した場合、ファイルを拒否して次のファイルに移動する必要があるようです。それのどこが悪いんだい? –

+0

@Bill:ファイルには何らかの形式のバイナリデータが残っていますが、127より大きいバイトは含まれていない可能性があるので...私は個人的に非ASCIIを失格とすることを躊躇します。もちろん、私はあなたの状況を知らない。これが結果を確認できるツールの場合には有用なヒューリスティックとして理にかなっていますが、その限界を*非常に*認識しておく必要があります。 –

0

これが自家製のアプリケーションであるかどうかは不明ですが、すばやく簡単な解決方法が必要です。

あなたはPath.GetExtension

string p = @"C:\Myfile.txt"; 
    string e = Path.GetExtension(p); 
    if (e == ".txt") 
    { 
     //do stuff; process the file 
    } 

の使用を作ることができそうであれば拡張データ型を決定しないことに注意してください。これは、拡張タイプがデータを表すことを保証できる場合にのみ有益です。

0

「.txt、.cvs」などのファイル拡張子を確認できますか?

事はあなたがエンコーディングを知っている必要があるとしているです: How can I detect the encoding/codepage of a text file

+0

いいえ - 延長は保証しません。ファイルストリームで検索する場合、エンコーディングは関係ありません。 –

関連する問題