プロジェクトに追加したテキストファイルにアクセスするには?

解決


MenPin  2005-09-23 00:53:12  No: 125656  IP: [192.*.*.*]

プロジェクトの新しい項目の追加でSlot.txtというファイルを追加して、
プログラムから

Dim File As New IO.StreamReader("Slot.txt")

としてファイルを開こうとしてもエラーになります。
プロジェクトに追加したテキストファイルにアクセスする方法を教えて欲しいです。よろしくお願いします。

編集 削除
MenPin  2005-09-23 00:53:47  No: 125657  IP: [192.*.*.*]

開発環境は[.Net]です

編集 削除
我龍院忠太  2005-09-23 08:20:52  No: 125658  IP: [192.*.*.*]

え!  Slot.txtはどこに置きたいんですか?
アッセンブリと同じフォルダーに置きたいのであれば、そのフルパスを、
実行ファイルと同じフォルダーに置きたいのであれば、
Dim File As New IO.StreamReader(Application.StartupPath & "\Slot.txt")
などとします。
当然のことですが読む前には、そのファイルに何か書き込んでね。

編集 削除
MenPin  2005-09-23 08:42:43  No: 125659  IP: [192.*.*.*]

テキストファイルを用意してパスを指定してアクセスする方法はわかるのですが、プロジェクトにテキストファイルを追加するのにはどういう意味があるのですか?

編集 削除
我龍院忠太  2005-09-23 10:17:45  No: 125660  IP: [192.*.*.*]

どういう意味があるのですかと言われても困っちゃうけど。(^^;
あなた次第なんですよね。
たとえばクライアントから来た山のようなクレームのメールをテキストにして、
どこまで対策したか書き込むとか。
営業が無理して取って来たお仕事の仕様書を貼り付けておくとか。
ふと思いついたすばらしいアルゴリズムを書き付けておくとか。
プログラムの立ち上げの時に自作のテキスト形式のIniファイルを読み込んで制御したい
場合なんかはIniファイルを追加しておくと、ちょっと変更して実行する時なんか便利かな。

強いて言えば、
>[新しいファイル] ダイアログ ボックス
>このダイアログ ボックスを使用して、新規ファイルを作成できます。
>このダイアログ ボックスを使用して作成したファイルは、
>ソリューション エクスプローラで、[その他のファイル] ノードの下に表示されます。
ってとこかな。
>http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vxurfNewFileDialog.asp

編集 削除
MenPin  2005-09-23 11:03:25  No: 125661  IP: [192.*.*.*]

なるほどプログラムからアクセスする目的ではなく
メモ書きのように使うのですね。

でもそのテキストファイルはソリューションエクスプローラで[その他のファイル]ノードの下ではなく[.vb]ファイルとかと同列に表示されますし、プロパティーを見てみるとビルドアクションというプロパティーがあって、選べる項目には[なし][コンパイル][コンテンツ][埋め込まれたリソース]とありますので、何かプログラムから扱う方法があるように思えたのです。このプロパティーはどういう意味なのでしょうかね。

>プログラムの立ち上げの時に自作のテキスト形式のIniファイルを
>読み込んで制御したい場合なんかはIniファイルを追加しておくと、
>ちょっと変更して実行する時なんか便利かな。
iniファイルの場合はプロジェクトに追加してプログラムからアクセスできるのですか?(その場合でもパス指定はしなくてはいけないのですか?)

編集 削除
MenPin  2005-09-23 11:08:27  No: 125662  IP: [192.*.*.*]

プロジェクトに追加したら直感的にはパス指定しなくてもよさそうなんですけどね

編集 削除
我龍院忠太  2005-09-23 12:25:33  No: 125663  IP: [192.*.*.*]

プロジェクトってのはゆりかごみたいなもんでっせ、大人になってからも
ゆりかご使う人は居ないでしょう。

編集 削除
じゃんぬねっと  URL  2005-09-23 12:52:25  No: 125664  IP: [192.*.*.*]

見てられなかったので、出てきました。(;´-ω-`)

プロジェクトに追加したテキストファイルとは、
通常「埋め込まれたリソース」のテキストファイルを指すと思います。
つまり、リソースから取得すれば OK です。

> プロジェクトに追加したら直感的にはパス指定しなくてもよさそうなんですけどね

つまりこれは、ある意味合っているということです。
ただ「追加」だけじゃだめですけどね。
追加した後、ビルドタイプを「埋め込まれたリソース」にしないとネ。(^-^*)

> プログラムの立ち上げの時に自作のテキスト形式のIniファイルを読み込んで制御したい
> 場合なんかはIniファイルを追加しておくと、ちょっと変更して実行する時なんか便利かな。

INI ファイルの話題が出てきたので、少しだけ。
.NET では INI ファイルは推奨されていません。
XML ファイルを使うようにしてください。

自作のフォーマットなんかも推奨されていません。
まあ、その場合は StreamReader で読むことになりそうですが。

# なんだかんだ言っておいて、API 未使用の INI ファイル読み込みなんて作ってますけどね (ヲイw)
http://jeanne.wankuma.com/library/class/

編集 削除
我龍院忠太  2005-09-23 13:27:14  No: 125665  IP: [192.*.*.*]

>Dim File As New IO.StreamReader("Slot.txt")
最初の質問は、これが何でエラーになるか?という質問です。
質問者はなぜパスが省略出来ないのかと問い合わせています。
コンパイルされた実行ファイルが、常に開発環境の中から実行される訳では
無いことを遠まわしに説明してます、こんなことは少し考えて見ると判る
ことだと考えたからです。

>INI ファイルの話題が出てきたので、少しだけ。
>.NET では INI ファイルは推奨されていません。
>XML ファイルを使うようにしてください。

>自作のテキスト形式のIniファイル
と書きました。

編集 削除
MenPin  2005-09-23 13:34:56  No: 125666  IP: [192.*.*.*]

リソースの使い方を調べてみたのですが良く分かりませんでした。
使い方を教えていただけないでしょうか?または良く分かる解説のあるサイト
を教えて欲しいです。

やろうとしていることは
CSV(テキスト)ファイルを読み込んで変数に格納しているだけなのですが
「埋め込まれたリソース」にしてできるでしょうか?

編集 削除
MenPin  2005-09-23 13:51:10  No: 125667  IP: [192.*.*.*]

サイトを検索してたらありました

'現在のコードを実行しているAssemblyを取得
Dim myAssembly As System.Reflection.Assembly = _
    System.Reflection.Assembly.GetExecutingAssembly()
'指定されたマニフェストリソースを読み込む
Dim sr As New System.IO.StreamReader( _
    myAssembly.GetManifestResourceStream("Project1.TextFile1.txt"), _
        System.Text.Encoding.GetEncoding("shift-jis"))
'内容を読み込む
Dim s As String = sr.ReadToEnd()
'後始末
sr.Close()

意味を理解するのは難しそうですが、とりあえずできるということが分かりました。
質問ですが、埋め込みだとexeファイルの内部にテキストファイルが取り込まれるのですよね?
自分がしたかったのはテキストファイルを修正したら読み込む内容が変わって実行結果も変わるというものだったので、テキストを変更できなくなるのならやっぱりプロジェクトに追加するのではなくパスを指定するか実行ファイルと同じ階層にテキストファイルを置くかしたほうがよさそうです。

編集 削除
Dental  2005-09-23 14:06:37  No: 125668  IP: [192.*.*.*]

> ビルドアクションというプロパティーがあって、選べる項目には
> [なし][コンパイル][コンテンツ][埋め込まれたリソース]とありますので

〜以下、昔書いた覚書から抜粋〜

『埋め込まれたリソース』
データがアセンブリ内に取り込まれる。プログラムからの利用には、
http://dobon.net/vb/dotnet/programing/bitmapresource.html
の例を参考に。
このタイプは、[プロジェクト]メニューの[すべてのファイルを表示]を
選択した時に表示される "Form1.resx" ファイルなどでも利用される。


『コンパイル』
ビルド時にコンパイルされるファイル。"Form1.vb"等のコードファイルが
これに相当。


『コンテンツ』
ファイルは変換される事なく、プロジェクトの一部としてそのまま配置。


『なし』
特に何もしない。


# 今、手元にVS.NETが無いので確認してないんですけど、
# 概ねこんなイメージかな、と。

編集 削除
MenPin  2005-09-23 14:10:32  No: 125669  IP: [192.*.*.*]

皆さん回答ありがとうございました。

編集 削除
我龍院忠太  2005-09-23 14:22:15  No: 125670  IP: [192.*.*.*]

>自分がしたかったのはテキストファイルを修正したら読み込む内容が変わって
>実行結果も変わるというものだったので、テキストを変更できなくなるのなら
>やっぱりプロジェクトに追加するのではなくパスを指定するか実行ファイルと
>同じ階層にテキストファイルを置くかしたほうがよさそうです。
いやだからプロジェクトに追加することと、パスを指定することは別物、
プロジェクトに追加しとけば、デバッグ時にファイルの内容を変えたり、
チェックしたりが、簡単に出来るのでは。

編集 削除
通ってみた  2005-09-23 16:12:32  No: 125671  IP: [192.*.*.*]

質問タイトルが「テキストファイルにアクセスするには?」だったらよかったのにねぇ

最初の質問と後になって書いてる内容で、疑問点が異なっているから回答者が混乱してしまうのですよ

「テキストファイルをプロジェクトに埋め込む方法もあるようですが、Openで開くのとどう違うのですか?」

ですな

編集 削除
MenPin  2005-09-23 16:44:40  No: 125672  IP: [192.*.*.*]

説明能力が足りなくて混乱させてしまったみたいですみませんでした。
質問してる内に疑問が増えて質問が変わってしまいましたね。

実行ファイルと同じ場所にテキストファイルを置き、開発環境から編集できるように、そのテキストファイルをただ単にプロジェクトに追加してみようと思います。

ありがとうございました。

編集 削除