DOBON.NET DOBON.NETプログラミング掲示板過去ログ

XMLファイルの読み込み

環境/言語:[環境:XP 言語:VB.NET]
分類:[.NET]

よろしくお願いします。
Tipsにある「オブジェクトの内容をXMLファイルに保存、復元する」を参考にし、
オブジェクトの内容を保存することが出来ました。
保存した内容は、
・ファイル1の読み込み先
・ファイル2の読み込み先
・XMLファイルの保存先
です。
これをForm1のLoadイベントで読み込もうと思っているのですが、
filenameをうまく指定できず、xmlファイルを読み込むことが出来ません。

↓Tipsからコピーしました(読み込みの方)
>Dim fileName As String = "C:\test.xml"
この""内をさっきの保存先にしなければいけないのはわかってますが、保存ファイルを移動させた場合、ここから先に動かなくなってしまいます。

>'XmlSerializerオブジェクトの作成
>Dim serializer As _
>New System.Xml.Serialization.XmlSerializer( _
>GetType(SampleClass))
>'ファイルを開く
>Dim fs As New System.IO.FileStream( _
>fileName, System.IO.FileMode.Open)
そして、保存したxmlファイルを開く部分に来ても、保存した場所が指定できていないためうまくいきません。

>'XMLファイルから読み込み、逆シリアル化する
>Dim cls As SampleClass = _
>CType(serializer.Deserialize(fs), SampleClass)
>'閉じる
>fs.Close()

なにかいい方法がありましたら教えてください。
2004/11/19(Fri) 19:24:15 編集(投稿者)

馬三郎さん、おはようございます。
> よろしくお願いします。
> Tipsにある「オブジェクトの内容をXMLファイルに保存、復元する」を参考にし、
> オブジェクトの内容を保存することが出来ました。
> 保存した内容は、
> ・ファイル1の読み込み先
> ・ファイル2の読み込み先
> ・XMLファイルの保存先
> です。
> これをForm1のLoadイベントで読み込もうと思っているのですが、
> filenameをうまく指定できず、xmlファイルを読み込むことが出来ません。
>
> ↓Tipsからコピーしました(読み込みの方)
> >Dim fileName As String = "C:\test.xml"
> この""内をさっきの保存先にしなければいけないのはわかってますが、保存ファイルを移動させた場合、ここから先に動かなくなってしまいます。
>
> >'XmlSerializerオブジェクトの作成
> >Dim serializer As _
> >New System.Xml.Serialization.XmlSerializer( _
> >GetType(SampleClass))
> >'ファイルを開く
> >Dim fs As New System.IO.FileStream( _
> >fileName, System.IO.FileMode.Open)
> そして、保存したxmlファイルを開く部分に来ても、保存した場所が指定できていないためうまくいきません。
>
> >'XMLファイルから読み込み、逆シリアル化する
> >Dim cls As SampleClass = _
> >CType(serializer.Deserialize(fs), SampleClass)
> >'閉じる
> >fs.Close()
>
> なにかいい方法がありましたら教えてください。

単純に「fileName」という変数の値を動的にしたらいいのではないでしょうか?
つまり、"C:\test.xml"は固定にしなければいけないという概念は必要ないですよ。
別に、"D:\XML\Hoge\test.xml"でも何でも構わないと思いますが...
もしかして、私が質問の内容を理解していないだけでしょうか?
ぺがらぼさん、返事ありがとうございます。
投稿内容がうまく伝わってなかったみたいで申し訳ないです。
簡単に言うと、filenameの値を("C:\test.xml"のように)ハードコーディングしたくないっていうだけなんです。いろいろ考えてみたんですけどやっぱりいい案が浮かばなくて・・・。
もしかしたらできないのかもなぁとも思ってます。
filenameを指定しなかったら、開けるxmlファイルがどこにあるのかわかりませんから。
この内容でうまく通じてくれるとありがたいです。
もしいい解決方法があれば教えてください。
よろしくお願いします。
■No7529に返信(馬三郎さんの記事)
> 簡単に言うと、filenameの値を("C:\test.xml"のように)ハードコーディングしたくないっていうだけなんです。
> いろいろ考えてみたんですけどやっぱりいい案が浮かばなくて・・・。

ハードコーディングの意味合いは判りかねますが、
コマンドライン引数で、XMLファイル名を渡してみるとか、
別の外部ファイルを見るとかしてはいかがでしょうか?

そーゆーことでもないですか? (;´_ゝ`)
java.lang.Nullpoさん、ありがとうございます。
その手がありました!!
もう1つ別のファイルを用意してうまく動作することが出来ました。

java.lang.Nullpo、ぺがらぼさん、わかりにくい文章でご迷惑をおかけしました。
それと、どうもありがとうございました。

また何かありましたらよろしくお願いします。
本題とは関係ないところですが・・・。

>>簡単に言うと、filenameの値を("C:\test.xml"のように)ハードコーディングしたくないっていうだけなんです。
>>いろいろ考えてみたんですけどやっぱりいい案が浮かばなくて・・・。
>
> ハードコーディングの意味合いは判りかねますが、

ハードコーディングはある種の決め打ちをした処理をソースコードに埋め込むコーディング方法です。
本題の例で言うと、"C:\test.xml"のファイルが存在しない環境では、
エラーになりますよね。でも、"C:\test.xml"は必ず存在するという前提が
成り立てば、エラーにはなりません。

とか説明するより↓を見た方がわかりやすいですね(^^;

ハードコード
http://e-words.jp/w/E3838FE383BCE38389E382B3E383BCE38389.html
よねKENさん、どうもありがとうございます。

それと、解決印つけるの忘れてました。
解決済み!
馬三郎さん、こんにちは。
もう、解決してるので、見ていないかもしれませんが、
>filenameを指定しなかったら、開けるxmlファイルがどこにあるのかわかりませんから。
は、xmlファイル名は決まっているが、ディレクトリパスを上手に指定できない...
と解釈しますと、
たとえば、
System.Application.StartupPath(実行ファイルのあるディレクトリ)
を使う。
これで有れば、実行ファイルが存在するディレクトリ(通常はbin)にそのxmlファイルを入れる...なんて事ができますが...

>もう1つ別のファイルを用意してうまく動作することが出来ました。
これも例えば、「App.config」を利用する事で、App.configを書き換えたとしても、再コンパイルは必要ないので、動的な情報とする事も可能です。

まぁ、簡単なアイデアとしてですが...
解決済み!
ぺがらぼさん、わざわざありがとうございます!!
まだVB.netの勉強を初めて日が浅く、いろんなことに挑戦したいと思っているので、今度はぺがらぼさんが教えてくれたアイデアを使って作りたいと思います。
今回はいろいろとありがとうございました。
又、これからもよろしくお願いします。
解決済みが消えてしまったのでもう一度。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板