パス文字列からファイル名部分を取り出すには?:.NET TIPS
PathクラスのGetFileNameメソッドを使用すると、ディレクトリ名とファイル名で構成されるパス文字列からファイル名部分のみを簡単に取り出せる。
本稿は2004/05/28に初版公開した記事を改訂し、Visual Studio 2017でコードの動作検証、図版の追加、全般的な構成の変更などを行ったものです。
ファイルのパス文字列(フルパス)からファイル名の部分を取り出すには、Pathクラス(System.IO名前空間)のGetFileNameメソッドを使用する。
特定のトピックをすぐに知りたいという方は以下のリンクを活用してほしい。
なお、パス文字列から拡張子なしのファイル名(=ベース名)や拡張子だけを、あるいはディレクトリパスの部分だけを取り出す方法については、次の記事を参照していただきたい。
また逆に、パスの部分文字列やファイル名を結合して1つのパス文字列にするには、次の記事をご覧いただきたい。タイトルは.NET Framework 4以降となっているが、それ以前のバージョンでの方法も記載している。
GetFileNameメソッドの使い方
例えば、次のように記述してこのメソッドを呼び出せば、その戻り値として文字列「notepad.exe」を得ることができる。なお、C#では「using System.IO;」行が、VBでは「Imports System.IO」行が必要になる。C#のコードでは「逐語的文字列リテラル」を使用している。これについては「文字列にエスケープ文字を埋め込むには?」の「逐語的文字列」を参照のこと。
Path.GetFileName(@"c:\windows\system32\notepad.exe");
Path.GetFileName("c:\windows\system32\notepad.exe")
パラメーターで指定したパス文字列のファイルが実際に存在するかどうかはチェックされない。このメソッドは単に、パス文字列中の最後のパス区切り文字「\」より後にある部分文字列を返すだけである。
正確には、「\」以外にも「/」(スラッシュ)と「:」(コロン)が、このメソッドではパスの区切り文字として認識される。このため、URLからHTMLファイルのファイル名部分を取得するような場合にも利用できる。
サンプルプログラム
次のサンプルプログラムでは、それぞれの区切り文字を含んだ3つの文字列からファイル名部分を取り出している。Visual Studio 2017でVBプロジェクトを新規作成して、以下のコードを試す場合には、Mainプロシージャ内のコードをコピー&ペーストしてほしい。
// getfilename.cs
using System;
using System.IO;
public class GetFileName {
static void Main() {
string path1 = @"c:\windows\system32\notepad.exe";
string file1 = Path.GetFileName(path1);
Console.WriteLine(file1); // 出力例:notepad.exe
string path2 = "c:notepad.exe";
string file2 = Path.GetFileName(path2);
Console.WriteLine(file2); // 出力例:notepad.exe
string path3 = "http://www.atmarkit.co.jp/index.html";
string file3 = Path.GetFileName(path3);
Console.WriteLine(file3); // 出力例:index.html
}
}
// コンパイル方法:csc getfilename.cs
' getfilename.vb
Imports System
Imports System.IO
Class GetFileName
Shared Sub Main()
Dim path1 As String = "c:\windows\system32\notepad.exe"
Dim file1 As String = Path.GetFileName(path1)
Console.WriteLine(file1) ' 出力例:notepad.exe
Dim path2 As String = "c:notepad.exe"
Dim file2 As String = Path.GetFileName(path2)
Console.WriteLine(file2) ' 出力例:notepad.exe
Dim path3 As String = "http://www.atmarkit.co.jp/index.html"
Dim file3 As String = Path.GetFileName(path3)
Console.WriteLine(file3) ' 出力例:index.html
End Sub
End Class
' コンパイル方法:vbc getfilename.vb
なお、指定したパス文字列に区切り文字が含まれていない場合には、指定したパス文字列がそのままメソッドの戻り値となる。
カテゴリ:クラスライブラリ 処理対象:パス
使用ライブラリ:Pathクラス(System.IO名前空間)
関連TIPS:パス名やファイル名からベース名と拡張子を取得するには?
関連TIPS:パス文字列からディレクトリ・パス部分を取り出すには?
関連TIPS:実行ファイルのパスを取得するには?
関連TIPS:3つ以上の文字列要素をファイル・パスとして結合するには?[4以降、C#、VB]
関連TIPS:文字列にエスケープ文字を埋め込むには?
更新履歴
【2018/08/29】Visual Studio 2017でコードの動作検証、図版の追加、全般的な構成の変更などを行いました。
【2004/05/28】初版公開。
■この記事と関連性の高い別の.NET TIPS
- パス文字列からディレクトリ・パス部分を取り出すには?
- パス名やファイル名からベース名と拡張子を取得するには?
- 文字と文字列を変換するには?
- 長いパスを8.3形式の短いパスに変換するには?
- 文字列から特定の文字列を取り除くには?
Copyright© Digital Advantage Corp. All Rights Reserved.