DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

URIのローカルファイルパスをWindowsのパス形式に変換する

例えば、「file:///c:/temp/doc.txt」のようなローカルファイルのパスを表すURIを、Windowsで使われる「c:\temp\doc.txt」という形式に変換する方法と、その逆を行う方法を紹介します。

URIをWindows形式のパスに変換する

URIをWindows形式のパスに変換する場合の正攻法は、変換したいURIからUriオブジェクトを作成し、そのLocalPathプロパティを取得するという方法です。ただしこの場合、URIに「#」が含まれているとLocalPathプロパティは「#」までの文字列しか返しません。

「#」以降の文字列は、Fragmentプロパティで取得できます。ただFragmentプロパティが返す文字列はURLエンコードされていますので、Uri.UnescapeDataStringメソッドなどを使ってデコードする必要があります。

なおUriクラスのプロパティについて詳しくは、「URLを解析する」をご覧ください。

以下に、「file:///c:/temp/doc.txt」を「c:\temp\doc.txt」に変換する例を示します。

VB.NET
コードを隠すコードを選択
'ローカルファイルのパスを表すURI
Dim uriPath As String = "file:///c:/temp/doc.txt"
'Uriオブジェクトを作成する
Dim u As New Uri(uriPath)
'変換するURIがファイルを表していることを確認する
If u.IsFile Then
    'Windows形式のパス表現に変換する
    Dim winPath As String = u.LocalPath + Uri.UnescapeDataString(u.Fragment)

    '結果を表示する
    Console.WriteLine(winPath)
    'c:\temp\doc.txt
Else
    Console.WriteLine("ファイルURIではありません。")
End If
C#
コードを隠すコードを選択
//ローカルファイルのパスを表すURI
string uriPath = "file:///c:/temp/doc.txt";
//Uriオブジェクトを作成する
Uri u = new Uri(uriPath);
//変換するURIがファイルを表していることを確認する
if (u.IsFile)
{
    //Windows形式のパス表現に変換する
    string winPath = u.LocalPath + Uri.UnescapeDataString(u.Fragment);

    //結果を表示する
    Console.WriteLine(winPath);
    //c:\temp\doc.txt
}
else
{
    Console.WriteLine("ファイルURIではありません。");
}

Windows形式のパスをURIに変換する

Windows形式のパスをURIに変換する場合も、まずUriオブジェクトを作成してから、AbsoluteUriプロパティを取得します。

以下に、「c:\temp\doc.txt」を「file:///c:/temp/doc.txt」に変換する例を示します。

VB.NET
コードを隠すコードを選択
'Windows形式のファイルパス
Dim winPath As String = "c:\temp\doc.txt"
'Uriオブジェクトを作成する
Dim u As New Uri(winPath)
'Uriオブジェクトがファイルを表していることを確認する
If u.IsFile Then
    'Windows形式のパス表現に変換する
    Dim uriPath As String = u.AbsoluteUri

    '結果を表示する
    Console.WriteLine(uriPath)
    'file:///c:/temp/doc.txt
Else
    Console.WriteLine("ファイルURIではありません。")
End If
C#
コードを隠すコードを選択
//Windows形式のファイルパス
string winPath = @"c:\temp\doc.txt";
//Uriオブジェクトを作成する
Uri u = new Uri(winPath);
//Uriオブジェクトがファイルを表していることを確認する
if (u.IsFile)
{
    //Windows形式のパス表現に変換する
    string uriPath = u.AbsoluteUri;

    //結果を表示する
    Console.WriteLine(uriPath);
    //file:///c:/temp/doc.txt
}
else
{
    Console.WriteLine("ファイルURIではありません。");
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。