夕暮ログ

C#やJavascript、最近はAndroidなんかも好きなtinqのブログ。「夕暮れログ」

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

file:///やfile://localhost/、URLエンコードなどがされているパスをWindowsの形式に直す

ブラウザからローカルのファイル名をコピーしたり、ブラウザからexeファイルを叩いた場合などには通常のC:\hogeのような形のパスではなく特殊な形でパスが渡されることがあります。
具体的にはfileスキームがついたり、localhostがついたり、URLエンコードされたり、パスの区切りが/になっていたりします。
.NET Frameworkでは区切りが/ぐらいは大丈夫ですがfileスキームがついたりすると「System.ArgumentException: URI フォーマットはサポートされていません。」が発生してしまいます。

その場合、System.Uriクラスを使ってURIを解析することである程度解決できます。
newでインスタンスを作成して、LocalPathで使えるパスを取得できます。

Uri uri = new Uri("file:///C:/%e3%83%86%e3%82%b9%e3%83%88.txt");
MessageBox.Show(uri.LocalPath);

MessageBox.Show(new Uri("file:///C:/%e3%83%86%e3%82%b9%e3%83%88.txt").LocalPath);

これでだいたいはいけますが、file://localhost/C:/hoge.txtのような形だとホスト名がついて「\\localhost\C:\hoge.txt」のようにホスト名がついてしまます。
どうやら.NETはこの形にも対応していないらしく、例外が発生してしまいます。
なのでlocalhostがつくパスを受ける可能性のある時は別途それを取り除く処理が必要かもしれません。
その際にまちがってlocalhostという文字を含むディレクトリやファイル名を変えてしまわないように注意してください。
Uriクラスを使って解析後に正規表現なりで先頭の部分をとるのがいいかもしれません。

参考
System.Uri クラス - MSDN
関連記事

コメント

ここをクリックしてコメントを投稿

非公開コメント

トラックバック

http://tinqwill.blog59.fc2.com/tb.php/82-900a3e6b

« next  ホーム  prev »

プロフィール

tinq tinq(もしくはTinqWill)

Sky  For   Every 改装予定

プログラミングお勉強中の高校生。月一くらいは更新したい

最新記事

カテゴリ

月別アーカイブ

検索フォーム

最新コメント

リンク

最新トラックバック

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。