• ベストアンサー

C# ローカルにあるhtmlの相対パスでの表示

C#webBrowserでローカルにあるhtmlを相対パスで表示させたいです。 exeファイルと同じフォルダにtest.htmlを置いたとして、 webBrowser1.Navigate(@".\test.html")とすれば出来ると思ったんですが出来ません。 ご教授頂ければ助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • x-1919
  • ベストアンサー率52% (91/173)
回答No.2

自分で 「exe ファイルと同じフォルダに置いてある」 とまでヒントを出しておきながら、そのファイルを相対パスで開こうとするのが間違い。 webBrowser コントロール (というかブラウザー) からすれば相対パスで指定されたってなんのこっちゃわからん。 exe ファイルのパスを取得してやれば必然的に html ファイルのフルパスが完成する。

manabu3
質問者

お礼

おお、なるほど。webBrowserにとってはそんな感じなのですね。 ありがとうございます。 exeファイルのパス取得してカレントディレクトリをそちらに設定してみます。

manabu3
質問者

補足

フルパスでできましたぁぁぁっ! ありがとうございます。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>exeファイルと同じフォルダにtest.htmlを置いたとして、 >webBrowser1.Navigate(@".\test.html")とすれば出来ると思ったんですが出来ません。 相対パスである以上、お約束ですが… カレントディレクトリはどこになっています? また、カレントディレクトリはプログラム実行中に変更される可能性もありますがその辺りは考慮されていますか? # Windowsだとファイルダイアログでカレントディレクトリが変更される場合もありますし。 「EXE起動時にEXEファイルのある場所がカレントディレクトリ」という考え方は改めた方がいいです。 コマンドプロンプトでフルパス指定すればカレントディレクトリは違いますし、 ショートカット作成して作業ディレクトリを指定すればやはり違います。 上記のファイルダイアログで移る…というのを回避したとすると、 EXE起動時に実行ファイルのある場所をカレントディレクトリに設定する。とかいう動作をしない限りは カレントディレクトリはあてにならない。 と考えておくべきです。 起動時に実行ファイルのパスを取得しておいて相対パスではなく絶対パスでアクセスする。のが安全です。 # ディレクトリトラバーサルはまた別の問題になりますが。

manabu3
質問者

お礼

回答ありがとうございます。 カレントディレクトリですね。その言葉すら出てこなかったので、助かります。 カレントディレクトリの設定をしてみます。