C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

同プロジェクト内のファイル


(過去ログ 8 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■7899 / inTopicNo.1)  同プロジェクト内のファイル
  
□投稿者/ スライム 伍長(54回)-(2006/10/30(Mon) 11:39:44)

分類:[VB.NET] 


分類:[VB.NET] 

いつもお世話になっています
環境はWindowsXP ProのVB.NET2005です
フォームにWebBrowserを設置して、同じプロジェクトに追加したフォルダ内にファイルを置いて、それを読み込もうとしています
フォルダ名はTextとし、ファイル名はテキスト.txt
ルート名前空間はWindowsApplication1
ホームページのタグの様な相対パスで出来るのかと思い
フォームロード時にWebBrowser1.Navigate("./Text/テキスト.txt")としてみたのですが読み込めませんでした。
同じプロジェクト内のファイルを参照する場合はどうすれば良いのかアドバイスお願いします

WindowsApplication1
 My Project
 Text - テキスト.txt
 Form1
下手な図ですが、WindowsApplication1の下にMy Project・Text(フォルダ)・Form1があって、
Text(フォルダ)の下にテキスト.txtがあります

0
引用返信 編集キー/
■7902 / inTopicNo.2)  Re[1]: 同プロジェクト内のファイル
□投稿者/ オノデラ 二等兵(3回)-(2006/10/30(Mon) 12:54:35)
オノデラ さんの Web サイト

分類:[VB.NET] 

2006/10/30(Mon) 12:56:45 編集(投稿者)

 VB.NET では「実行ファイル」のあるディレクトリがカレントディレクトリになるので、そこからの相対パスを指定してあげるか、Directory.SetCurrentDirectory でカレントディレクトリを任意の場所に設定すればいいと思います。

 (余談ですが、C# もディフォルトでは実行ファイルのディレクトリがカレントですが、C++ だと、プロジェクト(ソリューション?)のディレクトリがカレントになっています)

0
引用返信 編集キー/
■7908 / inTopicNo.3)  Re[2]: 同プロジェクト内のファイル
□投稿者/ スライム 伍長(55回)-(2006/10/30(Mon) 15:35:11)

分類:[VB.NET] 

オノデラさんありがとうございます
返事遅くなってしまってすみませんでした
ひとまずカレントディレクトリの事分かりました
今迄あやふやだったのでこの機会にしっかり勉強したいと思います

絶対パスは分かったのですが、相対パスの方はいまいちうまく設定出来ないので色々試行錯誤してみます。
改めまして、ありがとうございます

解決済み
引用返信 編集キー/
■7910 / inTopicNo.4)  Re[3]: 同プロジェクト内のファイル
□投稿者/ ぽぴ王子 軍曹(77回)-(2006/10/30(Mon) 15:53:36)
ぽぴ王子 さんの Web サイト

分類:[VB.NET] 

No7908に返信(スライムさんの記事)

こんにちは。

どうも解決しちゃっているようですが。

基本的な考え方はオノデラさんの方法でかまわないわけですが、カレントディレ
クトリがどこにあるのかは意識してはいけない、というのが一般的な考え方だと
思います。
例えば開発環境で言えば、C# では プロジェクト\bin\Debug(またはRelease)
配下に実行ファイルが存在し、そこが起動時のカレントディレクトリになるとい
うのはオノデラさんが解説してくださっている通りです。
でも、実行ファイルに対するショートカットを作成するなどして、そのショート
カットに作業フォルダを設定することで、そこが実行時のカレントディレクトリ
になります。
なので、「相対パスを意識すること自体がバグに繋がる」と考えておいてかまわ
ないでしょう(というようなことを以前にも書いた気がします…いつだっけ)。

この場合は実行ファイルパスの配下に Text/テキスト.txt が存在するという前
提になるので、以下のページを参考に実行ファイルのパスを取得し、それに相対
パスを追加したものを Path.GetFullPath でフルパスに変換して使用するのがい
いと思います。
http://www.atmarkit.co.jp/fdotnet/dotnettips/016exepath/exepath.html

0
引用返信 編集キー/
■7950 / inTopicNo.5)  Re[4]: 同プロジェクト内のファイル
□投稿者/ スライム 伍長(56回)-(2006/10/31(Tue) 14:28:31)

分類:[VB.NET] 

ぽぴ王子さん、ありがとうございます
返事が遅れてすみません

imports System.IO

Dim pasu As String = Path.GetFullPath("TEXT\テキスト.txt")
として、指定してあげて使って行けばいいんですね
私の場合は1つですが複数ある場合はその分を記述する必要がありますね

これとは別なんですが、ディレクトリを作ったり、ファイルを作ったりする場合は相対パスで作れちゃったので、ついつい相対パスで出来るものだと思ってしまいました。
あっちはダメで、こっちはOKって混乱しちゃいますね
色々試していって理解を深めていきたいです

解決済み
引用返信 編集キー/
■7963 / inTopicNo.6)  Re[5]: 同プロジェクト内のファイル
□投稿者/ ぽぴ王子 軍曹(79回)-(2006/10/31(Tue) 20:04:45)
ぽぴ王子 さんの Web サイト

分類:[VB.NET] 

2006/10/31(Tue) 20:05:26 編集(投稿者)

No7950に返信(スライムさんの記事)

こんにちは。

> Dim pasu As String = Path.GetFullPath("TEXT\テキスト.txt")
> として、指定してあげて使って行けばいいんですね

ちょっと違うかも。
".\TEXT\テキスト.txt" は『カレントディレクトリ』(この場合意図しているの
は実行ファイルがあるディレクトリ)の下の TEXT ディレクトリを見る、という
意味ですね。
で、私が No7910 で解説したのは、このカレントディレクトリが場合によっては
実行ファイルがあるディレクトリ“ではない”可能性がある、ということなんで
す。
この場合、実行ファイルがあるディレクトリを明示的に指定して、そこからの相
対パスを指定する必要があります。
なので、

Dim absolutePath As String = Path.GetFullPath(Path.GetDirectoryName(Application.ExecutablePath) + "\TEXT\テキスト.txt")

こんな感じになると思います。


> これとは別なんですが、ディレクトリを作ったり、ファイルを作ったりする場合は相対パスで作れちゃったので、ついつい相対パスで出来るものだと思ってしまいました。
> あっちはダメで、こっちはOKって混乱しちゃいますね

ディレクトリを作ったりファイルを作ったりするときも同じだったりします。
たまたまカレントディレクトリが意図するディレクトリだったので、そこからの
相対パスで良かっただけで、同様にカレントディレクトリがぜんぜん違うディレ
クトリだったとすると、これまたとんでもないことになりかねないわけです。

自分のいる場所(カレントディレクトリ)がトイレだと思って用を足していたら、
実はそこは自分の意図しない場所(たとえば布団の中とか)だった、ということ
にもなりかねないと、そういう風に考えるといいかもしれません。
# つーか下ネタかよ orz

いろいろ考えてみてくださいね。

解決BOXを外してしまったので修正 orz

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -