VB.NET Tips - テキストファイル先頭行削除処理

指定されたテキストファイルを読み込み指定でオープンし、一時ファイルを作成し、その一時ファイルを追加指定でオープンします。 読込ファイルの1行目をスキップする様にフラグ処理を行い、順次1行毎に一時ファイルに書込みます。

最終的に、一時ファイルを読込ファイルに上書きコピーし、一時ファイルを削除します。 テキストファイルのコードは Shift-JIS を想定していますので、エンコーディングは Shift-JIS に設定しています。

テキストファイルの読み込みには System.IO.StreamReader クラスを用います。
テキストファイルの追加書込みには System.IO.StreamWriter クラスを用います。

テキストファイル先頭行削除処理

    ''' -----------------------------------------------------------------------
    ''' 
    ''' テキストファイル先頭行削除処理
    ''' 
    ''' 処理データファイル名
    ''' 正常終了:true エラー発生:false
    ''' -----------------------------------------------------------------------
    Private Function DeleteTopTextFile(ByVal astrSrcFileName As String) As Boolean
        '戻り値初期化
        DeleteTopTextFile = False

        Dim sr As System.IO.StreamReader = Nothing
        Dim sw As System.IO.StreamWriter = Nothing
        Try
            'ファイルを読み込みで開く
            Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("shift_jis")
            sr = New System.IO.StreamReader(astrSrcFileName, enc)

            '一時ファイルを作成する
            Dim tmpPath As String = System.IO.Path.GetTempFileName()

            '一時ファイルを書き込みで開く
            sw = New System.IO.StreamWriter(tmpPath, True, enc)

            '先頭フラグON
            Dim blnFirstLine As Boolean = True

            'テキストを一行ずつ読込
            While sr.Peek() > -1
                '一行読込
                Dim line As String = sr.ReadLine()

                '先頭行スキップ
                If blnFirstLine = True Then
                    '先頭フラグONの場合、OFFしてスキップ
                    blnFirstLine = False
                    Continue While
                End If

                '一時ファイル書込
                sw.WriteLine(line)
            End While
            '閉じる
            sr.Close()
            sw.Close()
            sr = Nothing
            sw = Nothing

            '一時ファイルと入れ替える
            System.IO.File.Copy(tmpPath, astrSrcFileName, True)  'OverWrite
            System.IO.File.Delete(tmpPath)

            '正常終了
            DeleteTopTextFile = True

        Catch ex As Exception
            'エラー処理が必要な場合は、ここに記述する
        Finally
            If sr IsNot Nothing Then
                sr.Close()
                sr = Nothing
            End If
            If sw IsNot Nothing Then
                sw.Close()
                sw = Nothing
            End If
        End Try
    End Function