連載
» 2018年08月29日 05時00分 公開

.NET TIPS:パス文字列からファイル名部分を取り出すには?

PathクラスのGetFileNameメソッドを使用すると、ディレクトリ名とファイル名で構成されるパス文字列からファイル名部分のみを簡単に取り出せる。

[遠藤孝信, 山本康彦,共著]
「.NET TIPS」のインデックス

連載「.NET TIPS」

本稿は2004/05/28に初版公開した記事を改訂し、Visual Studio 2017でコードの動作検証、図版の追加、全般的な構成の変更などを行ったものです。


 ファイルのパス文字列(フルパス)からファイル名の部分を取り出すには、Pathクラス(System.IO名前空間)のGetFileNameメソッドを使用する。

POINT パス文字列からファイル名部分を取り出す方法

パス文字列からファイル名部分を取り出す方法 パス文字列からファイル名部分を取り出す方法


 特定のトピックをすぐに知りたいという方は以下のリンクを活用してほしい。

 なお、パス文字列から拡張子なしのファイル名(=ベース名)や拡張子だけを、あるいはディレクトリパスの部分だけを取り出す方法については、次の記事を参照していただきたい。

 また逆に、パスの部分文字列やファイル名を結合して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

ファイル名部分を取得するサンプルプログラム(上:C#、下:VB)
C#版サンプルプログラムのダウンロード
VB版サンプルプログラムのダウンロード

 なお、指定したパス文字列に区切り文字が含まれていない場合には、指定したパス文字列がそのままメソッドの戻り値となる。

更新履歴

【2018/08/29】Visual Studio 2017でコードの動作検証、図版の追加、全般的な構成の変更などを行いました。

【2004/05/28】初版公開。


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。