テキストファイルの読み書きについて VB6 と VB.NET の記述サンプルです
VB.NET では シフト JIS 以外の文字エンコーディングで記述されたファイルの読み書きも容易になりました
仕様的には VB6 と VB.NET で同じだと思っていたのですが 実は大きな違いがありました
違いがあったのは LineInput 関数で VB6 では キャリッジリターン (Chr(13)) または改行コード (Chr(13)+Chr(10)) の直前
までの文字列を読み込むようになっていましたが VB.NET では これに加えて ラインフィード (Chr(10)) も対象になっています
※ MSDN では ラインフィードが加えられたことについて 記述がありませんでした
VB6
書き込みの後に改行を行わない場合は 文字列の最後に ; (セミコロン) をつけます
Dim st_buff As String Dim i_fnum As Integer '' テキストファイルの読み込み i_fnum = FreeFile() Open "C:\test.txt" For Input As i_fnum Do While Not EOF(i_fnum) LineInput #i_fnum, st_buff Loop Close i_fnum '' テキストファイルの書き込み Open "C:\test.txt" For Output As i_fnum Print #i_fnum, "ABC"; Print #i_fnum, "DEF" Close i_fnum
VB.NET
VB.NET でもファイルの読み込みについての記述はほとんど変更ないようです
ファイルの書き込みについては 書き込みの後に改行を行うかどうかで Print または PrintLine 関数を使い分けます
しかし 実はここで使用されているようなファイルの I/O 関連の関数は すべて FileSystem モジュールに含まれており 正式には
Microsoft.VisualBasic.FileSystem.FreeFile などの記述が省略されているのです
Dim st_buff As String Dim i_fnum As Integer '' テキストファイルの読み込み i_fnum = FreeFile() FileOpen(i_fnum, "C:\test.txt", OpenMode.Input) Do While Not EOF(i_fnum) st_buff = LineInput(i_fnum) Loop FileClose(i_fnum) '' テキストファイルの書き込み FileOpen(i_fnum, "c:\test.txt", OpenMode.Output) Print(i_fnum, "ABC") PrintLine(i_fnum, "DEF") FileClose(i_fnum)
VB.NET でテキストファイルを読み書きするときに 容易にできるようになったのが シフト JIS 以外の文字エンコーディングで記述さ
れたファイルを扱うことです
下記の例では UNIX サーバから取得したような EUC で記述されたファイルを読み書きしています
※ 書き込み時に改行をラインフィード (Chr(10)) にすることはできないようなのですが Write メソッド で対応できます
Dim reader As StreamReader Dim writer As StreamWriter Dim st_buff As String '' ファイルの読み込み reader = New StreamReader("c:\test.txt", System.Text.Encoding.GetEncoding("EUC-JP")) Do While Not reader.Peek() = -1 st_buff = reader.ReadLine() Loop reader.Close() reader = Nothing '' ファイルの書き込み writer = New StreamWriter("c:\test.txt", False, System.Text.Encoding.GetEncoding("EUC-JP")) writer.Write("あいうえお") writer.WriteLine("かきくけこ") '' 改行をLFにするなら writer.Write("かきくけこ" & vbLf) writer.Close() writer = Nothing
上記で使用している StreamReader などは 名前空間 System.IO に存在します
上記の記述で実行するためには Imports System.IO のような記述を行うなどする必要があります