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の為に、上に、以下がいると思います。
ソース
説明は、コメントを見て下さい。
これを実行すると、
書き込みファイル(listR.txt)の中身は、こんなのです。
テキスト1
テキスト2
テキスト3
テキスト4
テキスト5
テキスト6
テキスト7
追加してみる
テキスト8
テキスト9
テキスト10
うまく行きました。
喜ばしい。
普通にfopenとかしたいなあ。
なんか知りませんが、ファイル名の前に@がいるようです。
階層フォルダじゃなければ、@がなくても読め、
階層フォルダだと、@がないと読めない。
とりあえず付けて置く。
[手こずった事メモ]
ちゃんと仕様とか読まずに作ったので、
1つ、はまった事がありました。
なぜか、書き込みファイルの最後に改行が1行追加されるという事です。
結局、ああでもないこうでもないを経由でして、
その時の原因は、
と、Writeではなく、WriteLineとしてしまった事で、
最後に改行を追加してしまっていたようです。
WriteとWriteLineの違いは、
Write:書き込んだ後に改行(¥r¥n)を入れない
WriteLine:書き込んだ後に改行(¥r¥n)を入れる
の違いでした。
そして、Writeに変更して
問題なしになりました。
記述:2015年08月頃
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
管理人による書き込みの確認後、荒らし書き込みでない場合に表示させていただきます。
悪意ある書き込みや挑発的な書き込みと思われる内容は、表示させません。
その為、ちょっと書き込みから表示までに時間がかかってしまいます。ご了承下さい。
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?
今のページの関連ページのリストへ
ザ・覚書のトップページに戻る
全ページのリストへ