ファイルとディレクトリのパス情報を操作する [C#]

Pathクラス

ファイルとディレクトリのパス情報を操作する方法について紹介します。
パスの情報を操作するにはSystem.IO名前空間にあるPathクラスを使用します。
Pathクラスには拡張子を変更するメソッドや、複数の文字列を1つのパスに結合してくれるメソッドなどの便利なメソッドがあります。
本記事ではPathクラスの使い方をサンプルコードと簡単な説明を記載していきます。
尚、本文中のサンプルコードをそのまま使用する場合にはSystem.IOへの参照(using)が必要になります。

ChangeExtensionメソッド

ChangeExtensionメソッドの構文は以下になります。

ChangeExtensionメソッドの使用例

指定したパス文字列の拡張子を変更したパスを取得します。

実行結果

ChangeExtension: C:\PathClass\Test\example.txt

Combineメソッド

Combineメソッドの構文は以下になります。

Combineメソッドの使用例

指定した複数の文字列を1つのパスに結合します。

実行結果

Combine: C:\PathClass\Test\Combine\abc_xyz\example.csv

Combineメソッドを使用するとパスとして結合する文字列の末尾の「\」はあってもなくても同じ結果を取得することができます。
上記の例では第1引数の文字列「C:\PathClass」が「C:\PathClass\」であっても同じ結果になります。
文字列の先頭に「\」があると「\」を開始文字としてパスが生成されます。
上記の例で「Combine」を「\Combine」にして実行すると「\Combine\abc_xyz\example.csv」というパスが生成されます。

GetDirectoryNameメソッド

GetDirectoryNameメソッドの構文は以下になります。

GetDirectoryNameメソッドの使用例

指定したパス文字列のディレクトリ情報(親フォルダーのパス)を取得します。

実行結果

GetDirectoryName: C:\PathClass\Test

GetDirectoryNameメソッドは指定したパスが属するディレクトリのパスを返してくれます。

GetExtensionメソッド

GetExtensionメソッドの構文は以下になります。

GetExtensionメソッドの使用例

指定したパス文字列の拡張子を取得します。

実行結果

GetExtension: .png

GetExtensionメソッドはファイル名の拡張子を「.」をつけて返してくれます。

GetFileNameメソッド

GetFileNameメソッドの構文は以下になります。

GetFileNameメソッドの使用例

指定したパス文字列のファイル名と拡張子を取得します。

実行結果

GetFileName: example.jpg

GetFileNameメソッドはファイルであるかディレクトリであるかは関係なく、パス区切り文字で区切った最後の要素を返します。
上記の例で引数の「C:\PathClass\Test\example.exe」を「C:\PathClass\Test\Directory」に変更して実行すると、GetFileNameメソッドは「Directory」を返します。

GetFileNameWithoutExtensionメソッド

GetFileNameWithoutExtensionメソッドの構文は以下になります。

GetFileNameWithoutExtensionメソッドの使用例

指定したパス文字列の拡張子が付いていないファイル名を取得します。

実行結果

GetFileNameWithoutExtension: example

GetFullPathメソッド

GetFullPathメソッドの構文は以下になります。

GetFullPathメソッドの使用例

指定したパス文字列の絶対パスを取得します。

実行結果

GetFullPath: C:\PathClass\Test\example.doc

GetInvalidFileNameCharsメソッド

GetInvalidFileNameCharsメソッドの構文は以下になります。

GetInvalidFileNameCharsメソッドの使用例

ファイル名に使用できない文字を含む配列を取得します。

実行結果

GetInvalidFileNameChars: “, <, >, |, , , , , , , , ,, ,
, , , , , , , , , , , , , , , , , , , :, *, ?, \, /

私の環境では以下の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メソッドの構文は以下になります。

GetInvalidPathCharsメソッドの使用例

パス名に使用できない文字を含む配列を取得します。

実行結果

GetInvalidPathChars: “, <, >, |, , , , , , , , ,, ,
, , , , , , , , , , , , , , , , , , 

私の環境では以下の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メソッドの構文は以下になります。

GetPathRootメソッドの使用例

指定したパス文字列のルートディレクトリ情報(ルートパス)を取得します。

実行結果

GetPathRoot: C:\

GetPathRootメソッドはネットワークの共有パスを指定すると共有されているパスを返します。
例えば「\\SomePc\Shared\Work\Documents」を指定すると「\\SomePc\Shared」が取得されます。(SomePcというPCのSharedフォルダーが共有に設定されています。)

GetRandomFileNameメソッド

GetRandomFileNameメソッドの構文は以下になります。

GetRandomFileNameメソッドの使用例

ランダムなフォルダー名またはファイル名を取得します。

実行結果

: z13o1wt4.4ft

GetRandomFileNameメソッドはランダムにファイル名を生成してくれます。拡張子も毎回ランダムで生成されます。

GetTempFileNameメソッド

GetTempFileNameメソッドの構文は以下になります。

GetTempFileNameメソッドの使用例

一意な名前のファイルを作成してその完全パスを取得します。

実行結果

GetTempFileName: C:\Users\LoginUser\AppData\Local\Temp\tmpFF3F.tmp

GetTempFileNameメソッドを実行すると、現在のユーザーの一時フォルダーのパス(通常は「C:\Users\現在のユーザー\AppData\Local\Temp」)に、0バイトの一時ファイルが作成されます。
現在のユーザーの一時フォルダーのパスは、GetTempPathメソッドで取得されるパスになります。
(ファイルが作成されますので、不要であれば削除する処理が必要になります。)

GetTempPathメソッド

GetTempPathメソッドの構文は以下になります。

GetTempPathメソッドの使用例

現在のユーザーの一時フォルダーのパスを取得します。

実行結果

GetTempPath: C:\Users\LoginUser\AppData\Local\Temp\

現在のユーザーの一時フォルダーのパス(通常は「C:\Users\現在のユーザー\AppData\Local\Temp」)が取得できます。

HasExtensionメソッド

HasExtensionメソッドの構文は以下になります。

HasExtensionメソッドの使用例

指定したパス文字列に拡張子が含まれているかどうかを取得します。(拡張子が含まれている場合はTrue、含まれていない場合はFalse)

実行結果

HasExtension: True

IsPathRootedメソッド

IsPathRootedメソッドの構文は以下になります。

IsPathRootedメソッドの使用例

ファイルパスにルートが含まれているかどうかを取得します。(ルートが含まれている場合はTrue、含まれていない場合はFalse)

実行結果

IsPathRooted: True

Pathクラスのフィールド

Pathクラスにはディレクトリの区切り文字などの読み取り専用のフィールドが用意されています。

AltDirectorySeparatorCharフィールド

パス文字列のディレクトリの区切り文字の代替文字の「/」を保持しています。

DirectorySeparatorCharフィールド

パス文字列のディレクトリの区切り文字の「\」を保持しています。

PathSeparatorフィールド

環境変数のパス文字列の区切り文字の「;」を保持しています。

VolumeSeparatorCharフィールド

パス文字列のボリューム区切り文字の「:」を保持しています。

Pathクラスのフィールドの使用例

以下の例では、Pathクラスの各フィールドの値をコンソールに出力します。

Pathクラスを使用するとパスに関する様々な処理を実装できます。特にCombineメソッド、GetInvalidFileNameCharsメソッド、GetInvalidPathCharsメソッド、GetRandomFileNameメソッド、GetTempFileNameメソッドの5つのメソッドはとても便利です。

参考URL
Path クラス