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

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

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

Re[5]: テキストの保存について。


(過去ログ 73 を表示中)

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

■42750 / inTopicNo.1)  テキストの保存について。
  
□投稿者/ Dot (5回)-(2009/10/21(Wed) 06:01:31)

分類:[C#] 

2009/10/21(Wed) 06:02:12 編集(投稿者)
開発環境:VCS2008
言語:C#

いつも参考にさせていただいてます。Dotです。

FreeMemoというフォームを開いたときにその実行アプリフォルダ内にあるFreeMemo.iniを読み込み、
FreeMemoを閉じた時にFreeMemo.iniにその時、FreeMemoBoxに書かれていた内容を保存したいのですが、
保存がうまくいきません。どこが間違っているか分からないのでご教授お願いします。


 private void FreeMemo_Load(object sender, EventArgs e)
        {
            string AppliPass = Application.StartupPath;
            string FreeMemoText = AppliPass + "\\FreeMemo.ini";
            FreeMemoBox.Text = FreeMemoText;
            string line, str = "";
            StreamReader sr = new StreamReader(FreeMemoBox.Text, Encoding.Default);
            if (File.Exists(FreeMemoBox.Text))
            {
                while ((line = sr.ReadLine()) != null) //テキストファイルを一行づつ読み込む
                {
                    str = str + line + "\r\n";
                }
                FreeMemoBox.Text = str;
            }
            sr.Close();
        }
        private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            string AppliPass = Application.StartupPath;
            string FreeMemoText = AppliPass + "\\FreeMemo.ini";
            StreamWriter sr = new StreamWriter((new FileStream(FreeMemoText, FileMode.Create)), Encoding.Default); //書込みモード
            sr.Write(FreeMemoBox.Text);
            sr.Close();
        }

引用返信 編集キー/
■42751 / inTopicNo.2)  Re[1]: テキストの保存について。
□投稿者/ επιστημη (2221回)-(2009/10/21(Wed) 06:05:37)
επιστημη さんの Web サイト
> 保存がうまくいきません。

なにが・どのように うまくいかないか説明を求む。

引用返信 編集キー/
■42752 / inTopicNo.3)  Re[2]: テキストの保存について。
□投稿者/ Dot (6回)-(2009/10/21(Wed) 06:12:52)
No42751 (επιστημη さん) に返信
>>保存がうまくいきません。
>
> なにが・どのように うまくいかないか説明を求む。

閉じても保存がされていないようなのです。
引用返信 編集キー/
■42753 / inTopicNo.4)  Re[3]: テキストの保存について。
□投稿者/ επιστημη (2222回)-(2009/10/21(Wed) 06:16:16)
επιστημη さんの Web サイト
2009/10/21(Wed) 06:19:50 編集(投稿者)

> 閉じても保存がされていないようなのです。

なおも説明不足。
Fom1_Closing() に飛び込んでる?
write-openに失敗? それとも書き込みに失敗?
別のどこかにファイルできてない?

調べることは山とあるでしょうに。

sr.Write("ここから");
sr.Write(FreeMemoBox.Text);
sr.Write("ここまで");

とかやってみました?

引用返信 編集キー/
■42755 / inTopicNo.5)  Re[4]: テキストの保存について。
□投稿者/ Dot (7回)-(2009/10/21(Wed) 06:21:22)
2009/10/21(Wed) 06:25:44 編集(投稿者)

No42753 (επιστημη さん) に返信
>>閉じても保存がされていないようなのです。
>
> だから調べてよ。write-openに失敗? それとも書き込みに失敗?
>
> sr.Write("ここから");
> sr.Write(FreeMemoBox.Text);
> sr.Write("ここまで");
>
> とかやってみました?
>

理解力不足で申し訳ありません。
やってみたところ、write-openに失敗してるようです。

追記:
Fom1_Closing() に飛び込んでる?

すいません、書き込みミスです。
正しくは
FreeMemo_Closing
でした。
引用返信 編集キー/
■42757 / inTopicNo.6)  Re[5]: テキストの保存について。
□投稿者/ ぽぴ王子 (460回)-(2009/10/21(Wed) 07:09:33)
ぽぴ王子 さんの Web サイト
2009/10/21(Wed) 07:10:53 編集(投稿者)
No42755 (Dot さん) に返信

> 理解力不足で申し訳ありません。
> やってみたところ、write-openに失敗してるようです。

理解力不足というか…
「write-openに失敗している」というのはどうやって判断しましたか?
意図した形でファイルに書き込まれていないから?
そのあたりを書いてもらわないと、回答者側がコードを元に自分で実験して
試してみる等の手間が必要になります。
質問者側は回答者側にそういった情報を提供する必要があるんじゃないかな。
επιστημηさんが
>だから調べてよ。write-openに失敗? それとも書き込みに失敗?
と書かれているのも、つまりはそういうことなわけで。

> 追記:
> Fom1_Closing() に飛び込んでる?
> 
> すいません、書き込みミスです。
> 正しくは
> FreeMemo_Closing
> でした。

FreeMem_Closing だろうが Form1_Closing だろうがどっちでもいいのだけれど。
これも意図としては「正しく Closing 処理を実行していますか?」ということですね。
write-open に失敗したとあるので、Closing 処理(というかイベント)を実行している
のではないかと思いますが、これまた疑問。そこンところを書いてもらわないと。
もしかしたら単に FreeMem_Closing メソッドが Closing イベントに結びついていなかった
だけということも考えられます。

あと、せっかくなので少しコードを見てみました。

>  private void FreeMemo_Load(object sender, EventArgs e)
>         {
>             string AppliPass = Application.StartupPath;

Appli "Pass" ってなんでしょ。StartupPath は Path ってなってますよ。パスワードのパスとキャリアパスのパスは違うパス…ってわかってますか?

>             string FreeMemoText = AppliPass + "\\FreeMemo.ini";

パス名とファイル名をつなげるときは Path.Combine を使うようにするといいです。

>             FreeMemoBox.Text = FreeMemoText;

あとでファイルから読み込んだ内容で FreeMemoBox.Text を書き換えるんだから、これ不要じゃないですか?

>             string line, str = "";
>             StreamReader sr = new StreamReader(FreeMemoBox.Text, Encoding.Default);
>             if (File.Exists(FreeMemoBox.Text))

ここで FreeMemoBox.Text をファイル名として使っているのが間違い。FreeMemoText があるじゃないですか。
あと、File.Exists と StreamReader の順番が逆のような気がしますよ。ファイルを開いてから存在確認するのはおかしいかと。

>             {
>                 while ((line = sr.ReadLine()) != null) //テキストファイルを一行づつ読み込む
>                 {
>                     str = str + line + "\r\n";

string クラスに足していくのはあまり利口ではないです。こういう時は StringBuilder クラスが便利。
その前に書き込むときは StreamWriter.Write 一発だけど、読むときはなぜ ReadLine で一行ずつ読んでるんでしょう?

>                 }
>                 FreeMemoBox.Text = str;
>             }
>             sr.Close();
>         }
>         private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
>         {
>             string AppliPass = Application.StartupPath;
>             string FreeMemoText = AppliPass + "\\FreeMemo.ini";
>             StreamWriter sr = new StreamWriter((new FileStream(FreeMemoText, FileMode.Create)), Encoding.Default); //書込みモード
>             sr.Write(FreeMemoBox.Text);
>             sr.Close();
>         }

引用返信 編集キー/
■42762 / inTopicNo.7)  Re[5]: テキストの保存について。
□投稿者/ επιστημη (2223回)-(2009/10/21(Wed) 08:44:09)
επιστημη さんの Web サイト
> やってみたところ、write-openに失敗してるようです。

てことは FreeMemo_Closing() には飛び込んできてるのね?
オープンしようとしているパスは確認しましたか?
FreeMemoText は意図したパスを示していますか?
どんな現象/調査に基づいてwrite-open失敗だと判断しましたか?

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -