このチュートリアルでは、 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 TryDim 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 = ""
日記に表示機能を追加する
このセクションでは、 DisplayEntryTextBoxに最新のエントリを表示する機能を追加します。 また、さまざまなエントリを表示し、ユーザーがDisplayEntryTextBoxに表示するエントリを選択できるComboBoxを追加することもできます。
StreamReader クラスのインスタンスは、MyDiary.txtから読み取ります。
StreamWriter クラスと同様に、StreamReaderはテキスト ファイルでの使用を目的としています。
チュートリアルのこのセクションでは、次の表のコントロールをフォームに追加し、そのプロパティに対応する値を設定します。
| コントロール | 特性 | 価値観 |
|---|---|---|
| TextBox |
名前 表示 サイズ 複数行 |
DisplayEntryFalse120,60True |
| Button |
名前 テキスト |
Display陳列 |
| Button |
名前 テキスト |
GetEntriesエントリを取得する |
| ComboBox |
名前 テキスト 有効 |
PickEntriesエントリを選択する False |
コンボ ボックスを設定するには
PickEntriesComboBoxは、ユーザーが各エントリを送信する日付を表示するために使用されるため、ユーザーは特定の日付からエントリを選択できます。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からエントリを選択して、[ 表示] をクリックします。 選択したエントリの内容が
DisplayEntryTextBoxに表示されます。
ユーザーがエントリを削除または変更できるようにする
最後に、 DeleteEntry ボタンと EditEntry ボタンを使用して、ユーザーがエントリを削除または変更できる追加機能を含めることができます。 エントリが表示されない限り、両方のボタンは無効のままです。
次の表のコントロールをフォームに追加し、そのプロパティに対応する値を設定します。
| コントロール | 特性 | 価値観 |
|---|---|---|
| Button |
名前 テキスト 有効 |
DeleteEntryエントリの削除 False |
| Button |
名前 テキスト 有効 |
EditEntryエントリの編集 False |
| Button |
名前 テキスト 有効 |
SubmitEdit編集の送信 False |
エントリの削除と変更を有効にするには
DisplayEntry.Text = ReadStringした後、DisplayボタンのClick イベントに次のコードを追加します。DeleteEntry.enabled = TrueDeleteEntryボタンの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 = TrueEditEntryボタンのClick イベント ハンドラーを作成し、次のコードを追加します。Entry.Text = DisplayEntry.Text SubmitEdit.Enabled = TrueSubmitEditボタンの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 キーを押してアプリケーションをコンパイルします。 [ エントリの取得] をクリックし、エントリを選択して、[ 表示] をクリックします。 エントリが DisplayEntryTextBoxに表示されます。 [ エントリの編集] をクリックします。 エントリが EntryTextBoxに表示されます。
Entry
TextBoxのエントリを編集し、[編集の送信] をクリックします。
MyDiary.txt ファイルを開き、修正を確認します。 エントリを選択し、[ エントリの削除] をクリックします。
MessageBoxが確認を要求したら、[OK] をクリックします。 アプリケーションを閉じ、 MyDiary.txt を開いて削除を確認します。
こちらも参照ください
.NET