パスまたはファイル名から拡張子を抽出するにはGetExtensionメソッドを使います。 GetExtensionメソッドでは、パスにファイル名がない場合でも例外にはならず、単に拡張子はないものとして空の文字列が返されます。 このメソッドでは、ピリオド.
も含めて拡張子として扱われます。 (ファイル名がfile.txt
なら拡張子は.txtとなる)
ファイル名が拡張子を持たない場合、拡張子がピリオドのみの場合は空の文字列が返されます。 ピリオドが複数あるファイル名の場合は、一番最後のピリオド以降を拡張子として返します。 (ファイル名がfile.txt.bak
なら拡張子は.bakとなる)
GetExtensionメソッドでは、UNIX系OSで隠しファイルとして扱われるドットファイル(dot file)のようなピリオドで始まるファイル名に対して特別な考慮はされません。 そのため、ピリオドが一つだけ含まれるドットファイルは、ファイル名全体が拡張子と判断され、GetExtensionメソッドはファイル名をそのまま返します。
さらに非Windows環境では、ピリオドを含み、かつWindows形式のディレクトリ区切り記号\
で終わるパスは、拡張子として判断される点に注意が必要です。 例えばパスsome.dir\
はディレクトリではなくファイルを表すものと判断されるため、これに従い拡張子も.dir\
であると判断されます。 パスsome.dir/
では、ディレクトリを表すと判断されるため、これに従い拡張子はないものとして扱われます。
Path.GetExtensionメソッドで拡張子を抽出する
using System;
using System.IO;
class Sample {
static void Main()
{
foreach (var path in new[] {
@"E:\dir\subdir\file.txt", // 絶対パス (Windows形式)
@"/dir/subdir/file.txt", // 絶対パス (UNIX形式)
@".\dir\subdir\file.txt", // 相対パス (Windows形式)
@"./dir/subdir/file.txt", // 相対パス (UNIX形式)
@"file.txt", // ファイル名のみのパス
@"file", // 拡張子のないファイル名
@"file.txt.bak", // ピリオドを二つ以上含むファイル名
@"file.", // ピリオドで終わるファイル名
@"some.dir\", // ピリオドを含むディレクトリ名のパス (Windows形式)
@"some.dir/", // ピリオドを含むディレクトリ名のパス (UNIX形式)
@"dir/.file", // ピリオドで始まるファイル名
@".file", // ピリオドで始まるファイル名
}) {
Console.WriteLine("path = {0}", path);
Console.WriteLine("ext = {0}", Path.GetExtension(path)); // パスからファイルの拡張子を抽出
Console.WriteLine();
}
}
}
実行結果
path = E:\dir\subdir\file.txt ext = .txt path = /dir/subdir/file.txt ext = .txt path = .\dir\subdir\file.txt ext = .txt path = ./dir/subdir/file.txt ext = .txt path = file.txt ext = .txt path = file ext = path = file.txt.bak ext = .bak path = file. ext = path = some.dir\ ext = path = some.dir/ ext = path = dir/.file ext = .file path = .file ext = .file
実行結果
path = E:\dir\subdir\file.txt ext = .txt path = /dir/subdir/file.txt ext = .txt path = .\dir\subdir\file.txt ext = .txt path = ./dir/subdir/file.txt ext = .txt path = file.txt ext = .txt path = file ext = path = file.txt.bak ext = .bak path = file. ext = path = some.dir\ ext = .dir\ path = some.dir/ ext = path = dir/.file ext = .file path = .file ext = .file