VB.NETでテキストファイルに書き込む方法を完全解説!WriteAllTextとAppendAllText
生徒
「VB.NETで作ったプログラムの結果を、メモ帳のようなファイルに残しておくことはできますか?」
先生
「もちろんです!VB.NETには、ファイルに文字を書き込むための『WriteAllText』や『AppendAllText』という非常に便利な命令がありますよ。」
生徒
「難しそうな英語の命令ですね…。パソコン初心者でも簡単に使えるのでしょうか?」
先生
「使い方は驚くほどシンプルです。たった一行のコードでファイルを新しく作ったり、続きを書いたりできます。基本から一緒に学んでいきましょう!」
1. テキストファイルへの書き込みとは?
プログラミングにおけるファイル書き込みとは、パソコンの画面上に表示されている文字や、プログラムが計算した結果を、パソコンの記憶装置(ハードディスクやSSD)の中に「ファイル」として保存する作業のことです。
パソコンを初めて触る方にとって、ファイル保存は「印刷」のようなものだと考えてください。画面にある情報を、後でいつでも見返せるように紙(ファイル)に書き写して、机の引き出し(フォルダ)にしまっておくイメージです。VB.NET(ヴィジュアルベーシック・ドットネット)を使えば、この保存作業を全自動で行うことができます。日記アプリや、家計簿のデータ保存、ゲームのスコア記録など、あらゆる場面で役立つ技術です。
2. 全てを新しく書き換えるWriteAllText
まず紹介するのが、WriteAllText(ライト・オール・テキスト)という命令です。この命令は「指定したファイルに、文字をまるごと書き込む」という働きをします。
もし、指定したファイルがまだ存在しない場合は、パソコンが自動的に新しくファイルを作成してくれます。すでにファイルがある場合は、中身を一旦全部消してから、新しい内容を上書きします。古い情報を捨てて、常に最新の情報だけを残したいときにぴったりの方法です。
' 保存先の場所(パス)とファイル名を決めます
Dim filePath As String = "C:\temp\sample.txt"
' 書き込みたい文章を用意します
Dim message As String = "こんにちは!これは新しく書き込んだ文章です。"
' WriteAllTextでファイルに書き込みます
System.IO.File.WriteAllText(filePath, message)
Console.WriteLine("ファイルの上書き保存が完了しました。")
この命令を実行すると、指定した場所に「sample.txt」という名前のファイルができあがります。中身を覗くと、指定したメッセージがしっかり保存されているはずです。
3. 続きから文字を足していくAppendAllText
次に、AppendAllText(アペンド・オール・テキスト)を覚えましょう。「アペンド」とは、日本語で「付け加える」や「追記する」という意味です。
先ほどのWriteAllTextは古い内容を消してしまいましたが、この命令は元の内容を大切に残したまま、そのすぐ後ろに新しい文字を継ぎ足していきます。例えば、毎日の日記を一つのファイルに溜めていったり、操作の記録(ログ)を順番に残していったりする時に非常に便利です。未経験の方でも、「ノートの次の行に書き足す」という感覚で使えます。
Dim logFile As String = "C:\temp\log.txt"
' 追記したい内容を用意します
Dim addText As String = "新しい記録を追記しました。" & vbCrLf
' AppendAllTextでファイルの最後に付け足します
System.IO.File.AppendAllText(logFile, addText)
Console.WriteLine("ファイルの追記が完了しました。")
「vbCrLf(ブイビー・シーアール・エルエフ)」という呪文のような言葉は、パソコンに「ここで改行してね」と伝えるための命令です。これを付けないと、文字が横に繋がってしまうので、追記の際はセットで覚えておくと便利です。
4. ファイルを保存する場所「パス」の考え方
ファイルを書き込むときに、パソコン初心者が最もつまずきやすいのがパス(Path)の指定です。パスとは、パソコンの中における「ファイルの住所」のことです。
例えば C:\temp\test.txt という書き方は、「Cドライブという大きな建物の中にある、tempという名前の部屋(フォルダ)の中の、test.txtさん」という意味になります。この住所を間違えると、パソコンは「そんな場所はありません!」と怒ってしまいます。プログラムを書く前に、あらかじめ「Cドライブ」の中に「temp」というフォルダを自分で作っておくのが、失敗しないためのコツです。
5. 複数の行をまとめて書き込むWriteAllLines
一行ずつではなく、複数の行をまとめてドバッと書き込みたい時は、WriteAllLines(ライト・オール・ラインズ)を使います。これは、あらかじめ「行のリスト」を作っておき、それを一気にファイルに流し込む方法です。
名簿のリストや、買い物リストなど、項目がたくさんあるデータを保存するのに最適です。この命令を使うと、一行ごとに自動で改行を入れてくれるため、自分で改行命令を書く手間が省けます。効率よくプログラミングをするための賢い選択肢です。
Dim listFile As String = "C:\temp\shopping_list.txt"
' 書き込みたい行のリスト(配列)を作ります
Dim items As String() = {"リンゴ", "バナナ", "牛乳", "たまご"}
' まとめて行ごとに書き込みます
System.IO.File.WriteAllLines(listFile, items)
Console.WriteLine("リストの保存が完了しました。")
実行結果として保存されるファイルの中身は以下のようになります。
リンゴ
バナナ
牛乳
たまご
6. 文字化けを防ぐ!エンコーディングの指定
ファイルを保存した後にメモ帳で開いたら、中身が変な記号だらけになっていた…。これは文字化け(もじばけ)と呼ばれる現象です。これを防ぐには、文字を書く時の「翻訳ルール」であるエンコーディング(Encoding)を正しく指定する必要があります。
現代のパソコンでは、UTF-8(ユーティーエフ・エイト)というルールを使うのが最も一般的で安全です。VB.NETの命令の中に、少しだけ「UTF-8で書いてね」という指示を付け加えるだけで、文字化けのトラブルを劇的に減らすことができます。
Dim path As String = "C:\temp\utf8_file.txt"
Dim text As String = "日本語もバッチリ保存できます。"
' Encoding.UTF8を指定して、文字化けを防ぎます
System.IO.File.WriteAllText(path, text, System.Text.Encoding.UTF8)
7. 上書きと追記、どちらを使うべき?
今回学んだ「上書き(WriteAllText)」と「追記(AppendAllText)」の使い分けに迷うかもしれません。判断基準はとてもシンプルです。
- 上書き:最新のスコア、現在の設定、今日のお天気など、「過去のデータはもういらない」場合。
- 追記:毎日の日記、お買い物の履歴、エラーが起きた記録など、「過去のデータもずっと残しておきたい」場合。
この使い分けができるようになれば、あなたはもう立派なプログラマの仲間入りです。自分の作りたいアプリがどちらのタイプなのか、想像しながら選んでみてください。
8. エラーを回避するための事前準備
最後に、ファイル書き込みを成功させるための大切なポイントをお伝えします。パソコンは非常に几帳面なので、少しでも環境が整っていないとエラーを出してしまいます。
例えば、「読み取り専用」になっているファイルに無理やり書き込もうとしたり、他のソフトで開いている最中のファイルを編集しようとしたりすると失敗します。また、保存先のフォルダが存在しない場合もエラーになります。プログラムを実行する前に、まずは手作業でフォルダを準備し、ファイルが他のソフトで開かれていないか確認する。こうした「事前準備」の癖をつけることが、スムーズな学習への第一歩です。
VB.NETは初心者にも非常に優しい言語です。今回紹介した System.IO.File クラスの機能を使いこなして、自分だけのデータを保存できる素晴らしいアプリを作ってみてくださいね!