Windowsマシンの1つのメカニズムは、ファイル拡張子に関連付けられたWindowsレジストリ内のコンテンツタイプを調べることです。 (私は、レジストリを直接参照せずにこれを行う方法を知りません。)
をレジストリ内では、テキストベースでのファイルの拡張子は一般的に、これらの特徴の1つ以上を有する必要があります。
- A例えば、テキストのMIMEプライマリタイプを示すコンテンツタイプ、
text/plain
またはtext/application
- プレーンテキスト永続ハンドラに割り当てられたGUID
{5e941d80-bf96-11cd-b579-08002b30bfeb}
とtext
- デフォルトのハンドラの知覚種類、。
次のような方法では、これらの特性に関連付けられているすべてのシステム拡張を返します。
// include using reference to Microsoft.Win32;
static IEnumerable<string> GetTextExtensions()
{
var defaultcomp = StringComparison.InvariantCultureIgnoreCase;
var root = Registry.ClassesRoot;
foreach (var s in root.GetSubKeyNames()
.Where(a => a.StartsWith(".")))
{
using (RegistryKey subkey = root.OpenSubKey(s))
{
if (subkey.GetValue("Content Type")?.ToString().StartsWith("text/", defaultcomp) == true)
yield return s;
else if (subkey.GetValue("PerceivedType")?.ToString().Equals("text", defaultcomp) == true)
yield return s;
else
{
using (var ph = subkey.OpenSubKey("PersistentHandler"))
{
if (ph?.GetValue("")?.ToString().Equals("{5e941d80-bf96-11cd-b579-08002b30bfeb}", defaultcomp) == true)
yield return s;
}
}
}
}
}
出力は、ワークステーションの構成に依存しますが、私の現在のマシンのリターンに:
を。 a、.AddIn、.ans、.asc、.asm、.asmx、.aspx、.asx、.bas、.bat、.bcp、.c、.cc、.cd、.cls、.cmd、...
これは正しくファイル拡張子のマッピングアプリケーションのインストーラに依存するが、大きなテキストファイルの種類のほとんどを識別するために表示されます。
出典
2015-11-14 19:48:55
drf
これを行うには良い方法はありません。だから、ハックした "読んでみてください。内容を理解できればテキストです"は "最高"です。トピックに関する以前のディスカッションの「拡張子なしのファイルタイプの検出」(または同様のもの)を検索することを検討することもできます。 –
拡張子は、ファイルの内容の弱い表示のみを提供します。テキストを含むこれらのファイルなしで '.cs'拡張子も使用するアプリケーションがあります。 –
私は1つ、少なくとも一般的なものではないと思います。たとえば、単語ファイルからの拡張子docxはそのままのテキストではなく、docx-filesは圧縮されたXMLファイルです。しかし、ユーザーとしては、おそらくワードファイルがテキストと見なされることになります。 –