ファイルのパスをフォルダ名とファイル名に分離し、フォルダ名のみ取得するにはSystem.IO.Path.GetDirectoryName()を使用します。例外やNULLを返す場合があるので注意が必要です。
サンプルコード
-
C#
string directoryName = System.IO.Path.GetDirectoryName(path); -
VB.NET
Dim directoryName As String = System.IO.Path.GetDirectoryName(path)
GetDirectoryNameを使用する際の注意
- 空文字列を指定すると例外が発生しますが、nullを渡しても例外は発生しません。
- nullを返す場合と空文字列を返す場合があります。
- ネットワークパスで始まる場合、パス中にフォルダが無いとnullを返します。
- パスで使えない文字を渡すと例外が発生します。
| GetDirectoryNameに渡した文字列 | 結果 | 備考 |
|---|---|---|
| (空文字列) | 例外 System.ArgumentException パスの形式が無効です。 | |
| (null) | (null) | |
| test | (空文字列) | |
| c:\ | (null) | |
| c:\test | c:\ | |
| c:\test\ | c:\test | |
| c:\test\. | c:\test | |
| c:\test\.. | c:\test | |
| c:\test\memo.txt | c:\test | |
| c:\test\memo.txt\ | c:\test\memo.txt | |
| c:\test\..\test\memo.txt | c:\test\..\test | |
| c:\test\..\test\memo.txt\ | c:\test\..\test\memo.txt | |
| . | (空文字列) | |
| .\ | . | |
| .\test | . | |
| .\test\ | .\test | |
| .\test\memo.txt | .\test | |
| .\test\memo.txt\ | .\test\memo.txt | |
| .\test\..\test\memo.txt | .\test\..\test | |
| .\test\..\test\memo.txt\ | .\test\..\test\memo.txt | |
| .. | (空文字列) | |
| ..\ | .. | |
| ..\test | .. | |
| ..\test\ | ..\test | |
| ..\test\memo.txt | ..\test | |
| ..\test\memo.txt\ | ..\test\memo.txt | |
| ..\test\..\test\memo.txt | ..\test\..\test | |
| ..\test\..\test\memo.txt\ | ..\test\..\test\memo.txt | |
| \\networkPC\ | (null) | |
| \\networkPC\test | (null) | "c:\test"や".\test"と挙動が異なる |
| \\networkPC\test\ | \\networkPC\test | |
| \\networkPC\test\memo.txt | \\networkPC\test | |
| \\networkPC\test\memo.txt\ | \\networkPC\test\memo.txt | |
| \\networkPC\test\..\test\memo.txt | \\networkPC\test\..\test | |
| \\networkPC\test\..\test\memo.txt\ | \\networkPC\test\..\test\memo.txt | |
| パスで使えない文字を含む | 例外「System.ArgumentException "パスに無効な文字が含まれています。"」 |
検証環境
- Microsoft Visual Studio 2008 Version 9.0.30729.4462 QFE Edition: Professional
- Microsoft .NET Framework Version 3.5 SP1
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))