忘れる前に覚書。優しい文章を目指します。
ザ・覚書 ザ・覚書
出来るだけ子供にも、わかりやすいように書いて行きたいと思います。

PCバージョンでサイトを表示しています。
ザ・覚書のトップページに戻る今のページの関連ページのリストへ

C# ファイルオープン・1行ずつ読み込み・書き込み・クローズ

☆C# ファイルオープン・1行ずつ読み込み・書き込み・クローズ

VCのAPIでウィンドウ関係の画面周りを作るのが面倒なので
C#のデザイナモードで、あるプログラムを作ってみる事にしました。
その時、色々遊んだ時のものです。

C#は知りませんでしたので、基礎からです。
やっぱり普通のCと関数(クラス)が違うので知らないと出来ないようです。
知っているか知らないかという話で、ロジックを考えるのは一緒でしょうけど。

以下のソースは、実行した時に
読み込みファイルを文字コードUTF-8で開いて、1行ずつ読んで、
溜めて行って、7行目の後に文字「追加してみる」を追加して、閉じて、
書き込みファイルを文字コードUTF-8で開いて、
溜めたのを書いて、閉じる、ついでにアプリも終了。

という行動をするプログラムです。


基礎のプログラムですけど、すぐ忘れるのでメモっておきます。

ちなみにフォームにボタンを1個置いて、その中で遊びました。

C#の基礎メモになります。

読み込みファイル(list.txt)の中身は、こんなのです。


テキスト1
テキスト2
テキスト3
テキスト4
テキスト5
テキスト6
テキスト7
テキスト8
テキスト9
テキスト10



ファイルのIOの為に、上に、以下がいると思います。

using System.IO;

ソース
説明は、コメントを見て下さい。

        private void button1_Click(object sender, EventArgs e)
        {

            int icounter = 0;               // 何行目を読んでいるか?
            string stZenbu = string.Empty;  // 出力内容を格納
            string stBuffer;                // バッファ

            // 一応BACKUP
            System.IO.File.Copy(@"list.txt", @"バックアップlist.txt", true);

            //--------------------------
            //--- オープンと読み込み ---
            //--------------------------
            // ファイルオープン 今回はUTF-8で
            StreamReader srFILE = new StreamReader(
                 @"list.txt", Encoding.GetEncoding("UTF-8"));

            icounter = 1;

            // ファイル内容をすべて読む
            for (;;)
            {
                if (srFILE.EndOfStream)  // EOFになったら
                {
                    // 読み込みを終了 forを抜ける
                    break; 
                }

                // ファイルを1行ずつ読み込む
                stBuffer = srFILE.ReadLine();

                // 読み込んだものを追加で格納する + "\r\n" 
                stZenbu += stBuffer + System.Environment.NewLine;

                // 真ん中に行を追加したいならしたりする
                if (icounter == 7) // たとえば7行目の後
                {
                    stBuffer = "追加してみる";
                    stZenbu += stBuffer + System.Environment.NewLine;
                }
                icounter++;
            }
            // ファイルクローズ
            srFILE.Close();

            //--------------------------
            //--- ファイルの書き込み ---
            //--------------------------
            Encoding UTF_8 = Encoding.GetEncoding("UTF-8"); // 今回はUTF-8で

            // 書き込みファイルオープン 今回はUTF-8で
            StreamWriter swFile =
              new StreamWriter(@"listR.txt", false, UTF_8);

            // 今まで溜めたのを書き込み
            swFile.Write(stZenbu);

            // ファイルクローズ
            swFile.Close();

            //アプリケーションを終了する
            Application.Exit();

        }



これを実行すると、
書き込みファイル(listR.txt)の中身は、こんなのです。


テキスト1
テキスト2
テキスト3
テキスト4
テキスト5
テキスト6
テキスト7
追加してみる
テキスト8
テキスト9
テキスト10



うまく行きました。
喜ばしい。





・気が付いた事など


普通にfopenとかしたいなあ。

なんか知りませんが、ファイル名の前に@がいるようです。
階層フォルダじゃなければ、@がなくても読め、
階層フォルダだと、@がないと読めない。
とりあえず付けて置く。

[手こずった事メモ]
ちゃんと仕様とか読まずに作ったので、
1つ、はまった事がありました。

なぜか、書き込みファイルの最後に改行が1行追加されるという事です。
結局、ああでもないこうでもないを経由でして、
その時の原因は、

// 今まで溜めたのを書き込み
swFile.WriteLine(stZenbu);


と、Writeではなく、WriteLineとしてしまった事で、
最後に改行を追加してしまっていたようです。


WriteとWriteLineの違いは、
Write:書き込んだ後に改行(¥r¥n)を入れない
WriteLine:書き込んだ後に改行(¥r¥n)を入れる
の違いでした。

そして、Writeに変更して

// 今まで溜めたのを書き込み
swFile.Write(stZenbu);



問題なしになりました。


記述:2015年08月頃





Twitter Facebook Google+ はてな Pocket LINE




一言掲示板です。なにかありましたら以下に書いて書き込みボタンを押して下さい。
管理人による書き込みの確認後、荒らし書き込みでない場合に表示させていただきます。
悪意ある書き込みや挑発的な書き込みと思われる内容は、表示させません。
その為、ちょっと書き込みから表示までに時間がかかってしまいます。ご了承下さい。

お名前

コメント




【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

今のページの関連ページのリストへ
ザ・覚書のトップページに戻る
全ページのリストへ