ひとつのファイルに複数の文字列を保存するには?

解決


ういhttp://madia.world  2005-10-04 09:52:06  No: 126031  IP: [192.*.*.*]

環境はVB.2003 です。
前回、ファイルをダウンロードして抽出後、テキストに保存する方法を
教えていただきました。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200510/05100016.txt

'抽出されたリンク情報をテキストボックスに表示
                    Dim fsk As FileStream = New FileStream("c:\urllist.txt", FileMode.Open)
                    Dim fsw As StreamWriter = New StreamWriter(fsk)
                    fsw.WriteLine(url)
                    fsw.close()
を追加してテキストにURLを追加することはできたのですが、このままだと
URLリストの最後(http://aaaaaa3)しか保存されませんでした。
URLリストは
http://aaaaaa1
http://aaaaaa2
http://aaaaaa3
とあるので全部保存したいのですがうまいうまくいきません。

自分なりに工夫して
 Dim fsk As FileStream = New FileStream("c:\urllist" & i &".txt", 'iはループごとに1増える
 FileMode.OpenOrCreate)
                    Dim fsw As StreamWriter = New StreamWriter(fsk)
                    fsw.WriteLine(url)
                    fsw.close()
でリストを全部保存することには成功したのですが、これだとファイルがどんどん増えてしまいます。
ひとつのファイルにまとめて保存する方法がわからないのでよろしくお願いします。


前回、無事解決という表現はすみませんでした。
躓いたところから一歩進めたのでここから先は自分で解決してみようと
解決ボタンを押しました。
すみません。

編集 削除
。。。  2005-10-04 10:16:52  No: 126032  IP: [192.*.*.*]

見づらいので、とりあえず発言。

編集 削除
特攻隊長まるるう  2005-10-04 10:28:57  No: 126033  IP: [192.*.*.*]

一度 StreamWriter を開いたら開きっぱなしで
WriteLine メソッドをループさせれば追加で
書込みできません?。
…で、最後に閉じる。

編集 削除
うい  2005-10-04 19:26:35  No: 126034  IP: [192.*.*.*]

レスありがとうございます。
Nextの次の行にfsw.close()と記入してみたところ
C:\Documents and Settings\うい\デスクトップ\Cトレ\mawaruvb\Form1.vb(154) : error BC30451: 名前 'fsw' は宣言されていません。
とでました。
ループ後ということなのでNextの次へ書き込んでみたのですが場所が
まずかったのでしょうか。

編集 削除
うい  2005-10-04 19:29:37  No: 126035  IP: [192.*.*.*]

一応ループ内ならfsw.と打った瞬間に選択肢がたくさん出るんですが・・。

編集 削除
通ってみた  2005-10-04 19:45:05  No: 126036  IP: [192.*.*.*]

>>"c:\urllist" & i &".txt"

数値と文字列が混在してますが.Netってこんなんアリなんですね・・・

編集 削除
通ってみた  2005-10-04 19:45:59  No: 126037  IP: [192.*.*.*]

あー勝手にiが数値だと思い込んでましたが、違ってたらスンマセン

編集 削除
うい  2005-10-04 20:50:35  No: 126038  IP: [192.*.*.*]

一応この状態で動かすとループするたびに
urllist0.txt
urllist1.txt
のようにどんどんテキストファイルができます。
iはループ回数なんで数字だったと思います。

編集 削除
030  2005-10-04 22:25:25  No: 126039  IP: [192.*.*.*]

なんか変数のスコープについて全く理解されていないようですね。
ソース丸写しもいいですが、急がずもう少し基礎から始めてみてはどうですか?
For文の中で宣言したオブジェクト変数はForの外では使えないです。
If分の中で宣言したオブジェクト変数はIf文の外では使えないです。

>Dim fsk As FileStream = New FileStream("c:\urllist.txt", FileMode.Open)
>Dim fsw As StreamWriter = New StreamWriter(fsk)
をForの前で宣言して下さい。
なぜそうしたら動くのかを調べてください。

編集 削除
通ってみた  2005-10-05 06:37:22  No: 126040  IP: [192.*.*.*]

基本的にFor〜NextでループならForの前で宣言してNextの後で閉じれば普通に動くと思うけど、何故ループ中に宣言してるのかを質問者に問いたい

最初にまるるうさんが言ってたのもこのことですよ


あと、

>>iはループ回数なんで数字だったと思います。

って・・・ご自身のプログラムですよね?大丈夫ですか?

編集 削除
うい  2005-10-05 09:32:45  No: 126041  IP: [192.*.*.*]

レスありがとうございます。
まるるうさん、通ってみたさんありがとうございます。
For〜Nextループ内での宣言は見本にかいてあったのでそのまま使ってしまいました。
グローバル変数だとかよくわからなかったんですが、今回のことで宣言する場所が大切だと身を持って知りました。


>って・・・ご自身のプログラムですよね?大丈夫ですか?

初めて作るプログラムなので動かないからちょっと弱気だったりします。
無事、ひとつのテキストファイルに複数のリストを保存することができました。
ありがとうございます。

編集 削除