file:
で表されるパス(file URI scheme形式のURI)はPathクラスでは直接扱うことはできません。 file:
はhttp:
などのURLと同様にUriクラスで扱います。
次の例のようにUri.HostプロパティとUri.LocalPathプロパティでURIからホスト名部とパス部を分離し、パス部をPathクラスで処理することにより、file:
形式のパスを扱うことができます。
file URI scheme形式のURIからパス部分を取得して、Pathクラスで処理する
using System;
using System.IO;
class Sample {
static void Main()
{
const string format = "{0,10} |{1,40} |{2,20} |{3,20} |{4,10} | {5}";
Console.WriteLine(format, "Host", "LocalPath", "Root", "Directory", "File", "URL");
Console.WriteLine(new string('-', 150));
foreach (var url in new[] {
"file:///e:/dir/subdir/file.txt",
"file:///dir/subdir/file.txt",
"file://127.0.0.1/e:/dir/subdir/file.txt",
"file://server1/shared/dir/subdir/file.txt",
}) {
var uri = new Uri(url);
Console.WriteLine(
format,
uri.Host,
uri.LocalPath,
Path.GetPathRoot(uri.LocalPath),
Path.GetDirectoryName(uri.LocalPath).Substring(Path.GetPathRoot(uri.LocalPath).Length),
Path.GetFileName(uri.LocalPath),
uri
);
}
}
}
実行結果
Host | LocalPath | Root | Directory | File | URL ------------------------------------------------------------------------------------------------------------------------------------------------------ | e:\dir\subdir\file.txt | e:\ | dir\subdir | file.txt | file:///e:/dir/subdir/file.txt | /dir/subdir/file.txt | \ | dir\subdir | file.txt | file:///dir/subdir/file.txt 127.0.0.1 | \\127.0.0.1\e:\dir\subdir\file.txt | \\127.0.0.1\e: | \dir\subdir | file.txt | file://127.0.0.1/e:/dir/subdir/file.txt server1 | \\server1\shared\dir\subdir\file.txt | \\server1\shared | \dir\subdir | file.txt | file://server1/shared/dir/subdir/file.txt