file:
で表されるパス(file URI scheme形式のURI)はPathクラスでは直接扱うことはできません。 file:
はhttp:
などのURLと同様にUriクラスで扱います。
次の例のようにUri.HostプロパティとUri.LocalPathプロパティでURIからホスト名部とパス部を分離し、パス部をPathクラスで処理することにより、file:
形式のパスを扱うことができます。
file URI scheme形式のURIからパス部分を取得して、Pathクラスで処理する
Imports System
Imports System.IO
Class Sample
Shared Sub Main()
Const format As String = "{0,10} |{1,40} |{2,20} |{3,20} |{4,10} | {5}"
Console.WriteLine(format, "Host", "LocalPath", "Root", "Directory", "File", "URL")
Console.WriteLine(New String("-"c, 150))
For Each url As String In New String() {
"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"
}
Dim uri As 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
)
Next
End Sub
End Class
実行結果
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