ファイルとディレクトリのパス情報を操作する方法について紹介します。
パスの情報を操作するにはSystem.IO名前空間にあるPathクラスを使用します。
Pathクラスには拡張子を変更するメソッドや、複数の文字列を1つのパスに結合してくれるメソッドなどの便利なメソッドがあります。
本記事ではPathクラスの使い方をサンプルコードと簡単な説明を記載していきます。
尚、本文中のサンプルコードをそのまま使用する場合にはSystem.IOへの参照(using)が必要になります。
目次
- 1 ChangeExtensionメソッド
- 2 Combineメソッド
- 3 GetDirectoryNameメソッド
- 4 GetExtensionメソッド
- 5 GetFileNameメソッド
- 6 GetFileNameWithoutExtensionメソッド
- 7 GetFullPathメソッド
- 8 GetInvalidFileNameCharsメソッド
- 9 GetInvalidPathCharsメソッド
- 10 GetPathRootメソッド
- 11 GetRandomFileNameメソッド
- 12 GetTempFileNameメソッド
- 13 GetTempPathメソッド
- 14 HasExtensionメソッド
- 15 IsPathRootedメソッド
- 16 Pathクラスのフィールド
ChangeExtensionメソッド
ChangeExtensionメソッドの構文は以下になります。
1 |
public static string ChangeExtension (string path, string extension); |
ChangeExtensionメソッドの使用例
指定したパス文字列の拡張子を変更したパスを取得します。
1 2 3 4 5 6 |
private static void ChangeExtension() { string result = Path.ChangeExtension(@"C:\PathClass\Test\example.csv", "txt"); string methodName = "ChangeExtension"; Console.WriteLine($"{methodName}: {result}"); } |
Combineメソッド
Combineメソッドの構文は以下になります。
1 |
public static string Combine (params string[] paths); |
Combineメソッドの使用例
指定した複数の文字列を1つのパスに結合します。
1 2 3 4 5 6 |
private static void Combine() { string result = Path.Combine(@"C:\PathClass", "Test", "Combine", "abc_xyz", "example.csv"); string methodName = "Combine"; Console.WriteLine($"{methodName}: {result}"); } |
Combineメソッドを使用するとパスとして結合する文字列の末尾の「\」はあってもなくても同じ結果を取得することができます。
上記の例では第1引数の文字列「C:\PathClass」が「C:\PathClass\」であっても同じ結果になります。
文字列の先頭に「\」があると「\」を開始文字としてパスが生成されます。
上記の例で「Combine」を「\Combine」にして実行すると「\Combine\abc_xyz\example.csv」というパスが生成されます。
GetDirectoryNameメソッド
GetDirectoryNameメソッドの構文は以下になります。
1 |
public static string GetDirectoryName (string path); |
GetDirectoryNameメソッドの使用例
指定したパス文字列のディレクトリ情報(親フォルダーのパス)を取得します。
1 2 3 4 5 6 |
private static void GetDirectoryName() { string result = Path.GetDirectoryName(@"C:\PathClass\Test\Target"); string methodName = "GetDirectoryName"; Console.WriteLine($"{methodName}: {result}"); } |
GetDirectoryNameメソッドは指定したパスが属するディレクトリのパスを返してくれます。
GetExtensionメソッド
GetExtensionメソッドの構文は以下になります。
1 |
public static string GetExtension (string path); |
GetExtensionメソッドの使用例
指定したパス文字列の拡張子を取得します。
1 2 3 4 5 6 |
private static void GetExtension() { string result = Path.GetExtension(@"C:\PathClass\Test\example.png"); string methodName = "GetExtension"; Console.WriteLine($"{methodName}: {result}"); } |
GetExtensionメソッドはファイル名の拡張子を「.」をつけて返してくれます。
GetFileNameメソッド
GetFileNameメソッドの構文は以下になります。
1 |
public static string GetFileName (string path); |
GetFileNameメソッドの使用例
指定したパス文字列のファイル名と拡張子を取得します。
1 2 3 4 5 6 |
private static void GetFileName() { string result = Path.GetFileName(@"C:\PathClass\Test\example.exe"); string methodName = "GetFileName"; Console.WriteLine($"{methodName}: {result}"); } |
GetFileNameメソッドはファイルであるかディレクトリであるかは関係なく、パス区切り文字で区切った最後の要素を返します。
上記の例で引数の「C:\PathClass\Test\example.exe」を「C:\PathClass\Test\Directory」に変更して実行すると、GetFileNameメソッドは「Directory」を返します。
GetFileNameWithoutExtensionメソッド
GetFileNameWithoutExtensionメソッドの構文は以下になります。
1 |
public static string GetFileNameWithoutExtension (string path); |
GetFileNameWithoutExtensionメソッドの使用例
指定したパス文字列の拡張子が付いていないファイル名を取得します。
1 2 3 4 5 6 |
private static void GetFileNameWithoutExtension() { string result = Path.GetFileNameWithoutExtension(@"C:\PathClass\Test\example.xls"); string methodName = "GetFileNameWithoutExtension"; Console.WriteLine($"{methodName}: {result}"); } |
GetFullPathメソッド
GetFullPathメソッドの構文は以下になります。
1 |
public static string GetFullPath (string path); |
GetFullPathメソッドの使用例
指定したパス文字列の絶対パスを取得します。
1 2 3 4 5 6 |
private static void GetFullPath() { string result = Path.GetFullPath(@"C:\PathClass\Test\example.doc"); string methodName = "GetFullPath"; Console.WriteLine($"{methodName}: {result}"); } |
GetInvalidFileNameCharsメソッド
GetInvalidFileNameCharsメソッドの構文は以下になります。
1 |
public static char[] GetInvalidFileNameChars (); |
GetInvalidFileNameCharsメソッドの使用例
ファイル名に使用できない文字を含む配列を取得します。
1 2 3 4 5 6 7 |
private static void GetInvalidFileNameChars() { char[] chars = Path.GetInvalidFileNameChars(); string result = string.Join(", ", chars); string methodName = "GetInvalidFileNameChars"; Console.WriteLine($"{methodName}: {result}"); } |
, , , , , , , , , , , , , , , , , , , :, *, ?, \, /
私の環境では以下の41種類の文字が取得できました。
No | ASCII | 文字 |
---|---|---|
1 | 0 | ‘\0’ |
2 | 1 | ‘\u0001’ |
3 | 2 | ‘\u0002’ |
4 | 3 | ‘\u0003’ |
5 | 4 | ‘\u0004’ |
6 | 5 | ‘\u0005’ |
7 | 6 | ‘\u0006’ |
8 | 7 | ‘\a’ |
9 | 8 | ‘\b’ |
10 | 9 | ‘\t’ |
11 | 10 | ‘\n’ |
12 | 11 | ‘\v’ |
13 | 12 | ‘\f’ |
14 | 13 | ‘\r’ |
15 | 14 | ‘\u000e’ |
16 | 15 | ‘\u000f’ |
17 | 16 | ‘\u0010’ |
18 | 17 | ‘\u0011’ |
19 | 18 | ‘\u0012’ |
20 | 19 | ‘\u0013’ |
21 | 20 | ‘\u0014’ |
22 | 21 | ‘\u0015’ |
23 | 22 | ‘\u0016’ |
24 | 23 | ‘\u0017’ |
25 | 24 | ‘\u0018’ |
26 | 25 | ‘\u0019’ |
27 | 26 | ‘\u001a’ |
28 | 27 | ‘\u001b’ |
29 | 28 | ‘\u001c’ |
30 | 29 | ‘\u001d’ |
31 | 30 | ‘\u001e’ |
32 | 31 | ‘\u001f’ |
33 | 34 | ‘”‘ |
34 | 42 | ‘*’ |
35 | 47 | ‘/’ |
36 | 58 | ‘:’ |
37 | 60 | ‘<' |
38 | 62 | ‘>’ |
39 | 63 | ‘?’ |
40 | 92 | ‘\\’ |
41 | 124 | ‘|’ |
GetInvalidPathCharsメソッド
GetInvalidPathCharsメソッドの構文は以下になります。
1 |
public static char[] GetInvalidPathChars (); |
GetInvalidPathCharsメソッドの使用例
パス名に使用できない文字を含む配列を取得します。
1 2 3 4 5 6 7 |
private static void GetInvalidPathChars() { char[] chars = Path.GetInvalidPathChars(); string result = string.Join(", ", chars); string methodName = "GetInvalidPathChars"; Console.WriteLine($"{methodName}: {result}"); } |
, , , , , , , , , , , , , , , , , ,
私の環境では以下の36種類の文字が取得できました。
No | ASCII | 文字 |
---|---|---|
1 | 0 | ‘\0’ |
2 | 1 | ‘\u0001’ |
3 | 2 | ‘\u0002’ |
4 | 3 | ‘\u0003’ |
5 | 4 | ‘\u0004’ |
6 | 5 | ‘\u0005’ |
7 | 6 | ‘\u0006’ |
8 | 7 | ‘\a’ |
9 | 8 | ‘\b’ |
10 | 9 | ‘\t’ |
11 | 10 | ‘\n’ |
12 | 11 | ‘\v’ |
13 | 12 | ‘\f’ |
14 | 13 | ‘\r’ |
15 | 14 | ‘\u000e’ |
16 | 15 | ‘\u000f’ |
17 | 16 | ‘\u0010’ |
18 | 17 | ‘\u0011’ |
19 | 18 | ‘\u0012’ |
20 | 19 | ‘\u0013’ |
21 | 20 | ‘\u0014’ |
22 | 21 | ‘\u0015’ |
23 | 22 | ‘\u0016’ |
24 | 23 | ‘\u0017’ |
25 | 24 | ‘\u0018’ |
26 | 25 | ‘\u0019’ |
27 | 26 | ‘\u001a’ |
28 | 27 | ‘\u001b’ |
29 | 28 | ‘\u001c’ |
30 | 29 | ‘\u001d’ |
31 | 30 | ‘\u001e’ |
32 | 31 | ‘\u001f’ |
33 | 34 | ‘”‘ |
34 | 60 | ‘<' |
35 | 62 | ‘>’ |
36 | 124 | ‘|’ |
GetPathRootメソッド
GetPathRootメソッドの構文は以下になります。
1 |
public static string GetPathRoot (string path); |
GetPathRootメソッドの使用例
指定したパス文字列のルートディレクトリ情報(ルートパス)を取得します。
1 2 3 4 5 6 |
private static void GetPathRoot() { string result = Path.GetPathRoot(@"C:\PathClass\Test\example.xml"); string methodName = "GetPathRoot"; Console.WriteLine($"{methodName}: {result}"); } |
GetPathRootメソッドはネットワークの共有パスを指定すると共有されているパスを返します。
例えば「\\SomePc\Shared\Work\Documents」を指定すると「\\SomePc\Shared」が取得されます。(SomePcというPCのSharedフォルダーが共有に設定されています。)
GetRandomFileNameメソッド
GetRandomFileNameメソッドの構文は以下になります。
1 |
public static string GetRandomFileName (); |
GetRandomFileNameメソッドの使用例
ランダムなフォルダー名またはファイル名を取得します。
1 2 3 4 5 6 |
private static void GetRandomFileName() { string result = Path.GetRandomFileName(); string methodName = ""; Console.WriteLine($"{methodName}: {result}"); } |
GetRandomFileNameメソッドはランダムにファイル名を生成してくれます。拡張子も毎回ランダムで生成されます。
GetTempFileNameメソッド
GetTempFileNameメソッドの構文は以下になります。
1 |
public static string GetTempFileName (); |
GetTempFileNameメソッドの使用例
一意な名前のファイルを作成してその完全パスを取得します。
1 2 3 4 5 6 |
private static void GetTempFileName() { string result = Path.GetTempFileName(); string methodName = "GetTempFileName"; Console.WriteLine($"{methodName}: {result}"); } |
GetTempFileNameメソッドを実行すると、現在のユーザーの一時フォルダーのパス(通常は「C:\Users\現在のユーザー\AppData\Local\Temp」)に、0バイトの一時ファイルが作成されます。
現在のユーザーの一時フォルダーのパスは、GetTempPathメソッドで取得されるパスになります。
(ファイルが作成されますので、不要であれば削除する処理が必要になります。)
GetTempPathメソッド
GetTempPathメソッドの構文は以下になります。
1 |
public static string GetTempPath (); |
GetTempPathメソッドの使用例
現在のユーザーの一時フォルダーのパスを取得します。
1 2 3 4 5 6 |
private static void GetTempPath() { string result = Path.GetTempPath(); string methodName = "GetTempPath"; Console.WriteLine($"{methodName}: {result}"); } |
現在のユーザーの一時フォルダーのパス(通常は「C:\Users\現在のユーザー\AppData\Local\Temp」)が取得できます。
HasExtensionメソッド
HasExtensionメソッドの構文は以下になります。
1 |
public static bool HasExtension (string path); |
HasExtensionメソッドの使用例
指定したパス文字列に拡張子が含まれているかどうかを取得します。(拡張子が含まれている場合はTrue、含まれていない場合はFalse)
1 2 3 4 5 6 |
private static void HasExtension() { bool result = Path.HasExtension(@"C:\PathClass\Test\example.html"); string methodName = "HasExtension"; Console.WriteLine($"{methodName}: {result}"); } |
IsPathRootedメソッド
IsPathRootedメソッドの構文は以下になります。
1 |
public static bool IsPathRooted (string path); |
IsPathRootedメソッドの使用例
ファイルパスにルートが含まれているかどうかを取得します。(ルートが含まれている場合はTrue、含まれていない場合はFalse)
1 2 3 4 5 6 |
private static void IsPathRooted() { bool result = Path.IsPathRooted(@"C:\PathClass\Test\example.pdf"); string methodName = "IsPathRooted"; Console.WriteLine($"{methodName}: {result}"); } |
Pathクラスのフィールド
Pathクラスにはディレクトリの区切り文字などの読み取り専用のフィールドが用意されています。
AltDirectorySeparatorCharフィールド
パス文字列のディレクトリの区切り文字の代替文字の「/」を保持しています。
DirectorySeparatorCharフィールド
パス文字列のディレクトリの区切り文字の「\」を保持しています。
PathSeparatorフィールド
環境変数のパス文字列の区切り文字の「;」を保持しています。
VolumeSeparatorCharフィールド
パス文字列のボリューム区切り文字の「:」を保持しています。
Pathクラスのフィールドの使用例
以下の例では、Pathクラスの各フィールドの値をコンソールに出力します。
1 2 3 4 5 |
// Pathクラスのフィールドの値をコンソールに出力 Console.WriteLine(Path.DirectorySeparatorChar); Console.WriteLine(Path.AltDirectorySeparatorChar); Console.WriteLine(Path.PathSeparator); Console.WriteLine(Path.VolumeSeparatorChar); |
Pathクラスを使用するとパスに関する様々な処理を実装できます。特にCombineメソッド、GetInvalidFileNameCharsメソッド、GetInvalidPathCharsメソッド、GetRandomFileNameメソッド、GetTempFileNameメソッドの5つのメソッドはとても便利です。
参考URL
Path クラス