[ VB.NET / C# ] ファイルの1行読み込み・1行書き込み ( StreamReader / StreamWriter )

Pocket

ファイルから1行ずつ読み込んだり、1行ずつ書き込みことは非常に多いと思います。ここでは、ファイルを 1行ずつの読み込み、それを 1行ずつの書き込むサンプルコードを掲載しています。

スポンサーリンク

ファイルの1行読み込み・1行書き込み

以下は、ファイルを1行ずつ読み込み、1行ずつ書き込むサンプルコードです。詳細はサンプル内のコメントを参照ください。

VB.NET

'Imports System.IO
'Imports System.Text

' 出力ファイルパスを組み立てる
Dim inputFile As String = "D:\input.txt"    ' 入力用ファイル
Dim outputFile As String = "D:\output.txt"  ' 出力用ファイル

' 出力用ファイルをオープンする
Using writer As New StreamWriter(outputFile, False, Encoding.Default)

    ' 入力用ファイルをオープンする
    Using reader As New StreamReader(inputFile, Encoding.Default)

        ' 読み取り可能文字が存在しない(ファイルの末尾に到着)すると -1 が返される
        While (reader.Peek() > -1)

            ' 1 行ずつ読み込み、出力ファイルに書き込む
            ' このときの改行コードは Windows標準の CRLF となる
            writer.WriteLine(reader.ReadLine())

        End While

        ' ファイルを閉じる
        reader.Close()
    End Using

    ' ファイルを閉じる
    writer.Close()
End Using

C#

//using System.Text;
//using System.IO;

// 出力ファイルパスを組み立てる
string inputFile  = @"D:\input.txt";   // 入力用ファイル
string outputFile = @"D:\output.txt";  // 出力用ファイル

// 出力用ファイルをオープンする
using (StreamWriter writer = new StreamWriter(outputFile, False, Encoding.Default)) {
    // 入力用ファイルをオープンする
    using (StreamReader reader = new StreamReader(inputFile, Encoding.Default)) {

        // 読み取り可能文字が存在しない(ファイルの末尾に到着)すると -1 が返される
        while (reader.Peek() > -1) {

            // 1 行ずつ読み込み、出力ファイルに書き込む
            // このときの改行コードは Windows標準の CRLF となる
            writer.WriteLine(reader.ReadLine());

        }

        // ファイルを閉じる
        reader.Close();
    }

    // ファイルを閉じる
    writer.Close();
}

ファイルの読み込みでは改行コードが、CR(MAC)、LF(Unix)、CRLF(Windows)のいずれの場合でもそこまでを1行として読み込みますが、出力は Windows 標準の CRLF となります。従って、書き込んだファイルは、ファイルサイズが変化する場合があります。

またポイントとして、using を使用して確実にファイルのクローズを行っていますので、上記のサンプルコードでは Close メソッドはコールしなくとも大丈夫です。Dispose メソッドが自動で呼び出されます。なんとなく気持ち悪いので呼び出しているだけです。

「 コードが長くなるから書くな 」とかいう時代になるかもです。しかし、ここら辺は人によってウンチクも多々ありますので、一旦ウンチク大会が始まると疲れるときもあります。正論は人の心に届かない時もあります。どうしても言いくるめたいときは、時間と場所と話し方を考えましょう。論理的な綻びや矛盾がなければ伝わると思いますよ。相手に聴く能力があるという前提条件が必要ですが。

参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *