このチュートリアルでは、 StreamReader クラスを使用してファイルを開いて読み取る方法、ファイルにアクセスしているかどうかを確認する方法、 StreamReader クラスのインスタンスで読み取ったファイル内の文字列を検索する方法、 StreamWriter クラスを使用してファイルに書き込む方法を示します。
注
次の手順では、一部の Visual Studio ユーザー インターフェイス要素の名前や場所がコンピューターに異なる場合があります。 これらの要素は、使用している Visual Studio エディションと使用する設定によって決まります。 詳細については、「IDEのカスタマイズ」を参照してください。
アプリケーションの作成
Visual Studio を起動し、ユーザーが指定されたファイルへの書き込みに使用できるフォームを作成して、プロジェクトを開始します。
プロジェクトを作成するには
[ファイル] メニューの [新しいプロジェクト] を選択します。
[ 新しいプロジェクト ] ウィンドウで、[ Windows アプリケーション] をクリックします。
[ 名前 ] ボックスに「
MyDiary
」と入力し、[OK] をクリック します。Visual Studio によって ソリューション エクスプローラーにプロジェクトが追加され、 Windows フォーム デザイナー が開きます。
次の表のコントロールをフォームに追加し、そのプロパティに対応する値を設定します。
オブジェクト | プロパティ | 価値 |
---|---|---|
Button |
名前 テキスト |
Submit エントリの送信 |
Button |
名前 テキスト |
Clear エントリのクリア |
TextBox |
名前 テキスト 複数行 |
Entry 何かを入力してください。 False |
ファイルへの書き込み
アプリケーションを介してファイルに書き込む機能を追加するには、 StreamWriter クラスを使用します。 StreamWriter は特定のエンコードでの文字出力用に設計されています。一方、 Stream クラスはバイト入力と出力用に設計されています。 StreamWriterを使用して、標準のテキスト ファイルに情報行を書き込みます。 StreamWriter クラスの詳細については、「StreamWriter」を参照してください。
書き込み機能を追加するには
[表示] メニューから [コード] を選択し、コード エディターを開きます。
アプリケーションは System.IO 名前空間を参照するため、フォームのクラス宣言の前に、コードの先頭に次のステートメント
Public Class Form1
追加します。Imports System.IO
ファイルに書き込む前に、 StreamWriter クラスのインスタンスを作成する必要があります。
[表示] メニューの [デザイナー] を選択して、Windows フォーム デザイナーに戻ります。
Submit
ボタンをダブルクリックして、ボタンのClick イベント ハンドラーを作成し、次のコードを追加します。Dim fw As StreamWriter
注
Visual Studio 統合開発環境 (IDE) はコード エディターに戻り、コードを追加する必要があるイベント ハンドラー内に挿入ポイントを配置します。
ファイルに書き込むには、StreamWriter クラスの Write メソッドを使用します。
Dim fw As StreamWriter
の直後に次のコードを追加します。 ファイルがまだ存在しない場合に作成されるため、ファイルが見つからない場合に例外がスローされることを心配する必要はありません。Dim ReadString As String Try 'Pass the file path and name to the StreamWriter constructor. 'Indicate that Append is True, so file will not be overwritten. fw = New StreamWriter("C:\MyDiary.txt", True) ReadString = Entry.Text fw.WriteLine(ReadString) Finally 'Close the file. fw.Close() End Try
Dim ReadString As String
の直後に次のコードを追加して、ユーザーが空白のエントリを送信できないことを確認します。If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then Entry.Text = "Please enter something." Return End If
これは日記であるため、ユーザーは各エントリに日付を割り当てる必要があります。
fw = New StreamWriter("C:\MyDiary.txt", True)
の後に次のコードを挿入して、変数Today
を現在の日付に設定します。Dim Today As DateTime Today = Now fw.Write(CStr(Today)) fw.Write(ControlChars.CrLf)
最後に、コードをアタッチして TextBoxをクリアします。
Clear
ボタンの Click イベントに次のコードを追加します。Entry.Text = ""
日記に表示機能を追加する
このセクションでは、 DisplayEntry
TextBoxに最新のエントリを表示する機能を追加します。 また、さまざまなエントリを表示し、ユーザーがDisplayEntry
TextBoxに表示するエントリを選択できるComboBoxを追加することもできます。
StreamReader クラスのインスタンスは、MyDiary.txt
から読み取ります。
StreamWriter クラスと同様に、StreamReaderはテキスト ファイルでの使用を目的としています。
チュートリアルのこのセクションでは、次の表のコントロールをフォームに追加し、そのプロパティに対応する値を設定します。
コントロール | 特性 | 価値観 |
---|---|---|
TextBox |
名前 表示 サイズ 複数行 |
DisplayEntry False 120,60 True |
Button |
名前 テキスト |
Display 陳列 |
Button |
名前 テキスト |
GetEntries エントリを取得する |
ComboBox |
名前 テキスト 有効 |
PickEntries エントリを選択する False |
コンボ ボックスを設定するには
PickEntries
ComboBoxは、ユーザーが各エントリを送信する日付を表示するために使用されるため、ユーザーは特定の日付からエントリを選択できます。GetEntries
ボタンにClick イベント ハンドラーを作成し、次のコードを追加します。Dim fr As StreamReader = Nothing Dim FileString As String FileString = "" Try fr = New System.IO.StreamReader("C:\MyDiary.txt") PickEntries.Items.Clear() PickEntries.Enabled = True Do FileString = fr.ReadLine If IsDate(FileString) Then PickEntries.Items.Add(FileString) End If Loop Until (FileString Is Nothing) Finally If fr IsNot Nothing Then fr.Close() End If End Try PickEntries.Enabled = True
コードをテストするには、F5 キーを押してアプリケーションをコンパイルし、[ エントリの取得] をクリックします。 ComboBoxのドロップダウン矢印をクリックして、入力日を表示します。
個々のエントリを選択して表示するには
Display
ボタンのClick イベント ハンドラーを作成し、次のコードを追加します。Dim fr As StreamReader Dim ReadString As String 'Make sure ReadString begins empty. ReadString = "" Dim FileString As String fr = New StreamReader("C:\MyDiary.txt") 'If no entry has been selected, show the whole file. If PickEntries.Enabled = False Or PickEntries.SelectedText Is Nothing Then Do 'Read a line from the file into FileString. FileString = fr.ReadLine 'add it to ReadString ReadString = ReadString & ControlChars.CrLf & FileString Loop Until (FileString = Nothing) Else 'An entry has been selected, find the line that matches. Do FileString = fr.ReadLine Loop Until FileString = CStr(PickEntries.SelectedItem) FileString = CStr(PickEntries.SelectedItem) & ControlChars.CrLf ReadString = FileString & fr.ReadLine 'Read from the file until EOF or another Date is found. Do Until ((fr.Peek < 0) Or (IsDate(fr.ReadLine))) ReadString = ReadString & fr.ReadLine Loop End If fr.Close() DisplayEntry.Visible = True DisplayEntry.Text = ReadString
コードをテストするには、F5 キーを押してアプリケーションをコンパイルし、エントリを送信します。 [ エントリの取得] をクリックし、 ComboBoxからエントリを選択して、[ 表示] をクリックします。 選択したエントリの内容が
DisplayEntry
TextBoxに表示されます。
ユーザーがエントリを削除または変更できるようにする
最後に、 DeleteEntry
ボタンと EditEntry
ボタンを使用して、ユーザーがエントリを削除または変更できる追加機能を含めることができます。 エントリが表示されない限り、両方のボタンは無効のままです。
次の表のコントロールをフォームに追加し、そのプロパティに対応する値を設定します。
コントロール | 特性 | 価値観 |
---|---|---|
Button |
名前 テキスト 有効 |
DeleteEntry エントリの削除 False |
Button |
名前 テキスト 有効 |
EditEntry エントリの編集 False |
Button |
名前 テキスト 有効 |
SubmitEdit 編集の送信 False |
エントリの削除と変更を有効にするには
DisplayEntry.Text = ReadString
した後、Display
ボタンのClick イベントに次のコードを追加します。DeleteEntry.enabled = True
DeleteEntry
ボタンのClick イベント ハンドラーを作成し、次のコードを追加します。Dim fr As StreamReader Dim ReadString As String Dim WriteString As String Dim ConfirmDelete As MsgBoxResult fr = New StreamReader("C:\MyDiary.txt") ReadString = fr.ReadLine ' Read through the textfile Do Until (fr.Peek < 0) ReadString = ReadString & vbCrLf & fr.ReadLine Loop WriteString = Replace(ReadString, DisplayEntry.Text, "") fr.Close() ' Check to make sure the user wishes to delete the entry ConfirmDelete = MsgBox("Do you really wish to delete this entry?", MsgBoxStyle.OKCancel) If ConfirmDelete = MsgBoxResult.OK Then File.Delete("C:\MyDiary.txt") Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt") fw.WriteLine(WriteString) fw.Close() ' Reset controls on the form DisplayEntry.Text = "" PickEntries.Text = "" PickEntries.Items.Clear() PickEntries.Enabled = False DeleteEntry.Enabled = False End If
ユーザーがエントリを表示すると、
EditEntry
ボタンが有効になります。DisplayEntry.Text = ReadString
した後、Display
ボタンのClick イベントに次のコードを追加します。EditEntry.Enabled = True
EditEntry
ボタンのClick イベント ハンドラーを作成し、次のコードを追加します。Entry.Text = DisplayEntry.Text SubmitEdit.Enabled = True
SubmitEdit
ボタンのClick イベント ハンドラーを作成し、次のコードを追加します。Dim fr As StreamReader Dim ReadString As String Dim WriteString As String If Entry.Text = "" Then MsgBox("Use Delete to Delete an Entry") Return End If fr = New StreamReader("C:\MyDiary.txt") ReadString = fr.ReadLine Do Until (fr.Peek < 0) ReadString = ReadString & vbCrLf & fr.ReadLine Loop WriteString = Replace(ReadString, DisplayEntry.Text, Entry.Text) fr.Close() File.Delete("C:\MyDiary.txt") Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt") fw.WriteLine(WriteString) fw.Close() DisplayEntry.Text = Entry.Text Entry.Text = "" EditEntry.Enabled = False SubmitEdit.Enabled = False
コードをテストするには、F5 キーを押してアプリケーションをコンパイルします。 [ エントリの取得] をクリックし、エントリを選択して、[ 表示] をクリックします。 エントリが DisplayEntry
TextBoxに表示されます。 [ エントリの編集] をクリックします。 エントリが Entry
TextBoxに表示されます。
Entry
TextBoxのエントリを編集し、[編集の送信] をクリックします。
MyDiary.txt
ファイルを開き、修正を確認します。 エントリを選択し、[ エントリの削除] をクリックします。
MessageBoxが確認を要求したら、[OK] をクリックします。 アプリケーションを閉じ、 MyDiary.txt
を開いて削除を確認します。
こちらも参照ください
.NET