次の方法で共有


チュートリアル: .NET Framework メソッドを使用したファイルの操作 (Visual Basic)

このチュートリアルでは、 StreamReader クラスを使用してファイルを開いて読み取る方法、ファイルにアクセスしているかどうかを確認する方法、 StreamReader クラスのインスタンスで読み取ったファイル内の文字列を検索する方法、 StreamWriter クラスを使用してファイルに書き込む方法を示します。

次の手順では、一部の Visual Studio ユーザー インターフェイス要素の名前や場所がコンピューターに異なる場合があります。 これらの要素は、使用している Visual Studio エディションと使用する設定によって決まります。 詳細については、「IDEのカスタマイズ」を参照してください。

アプリケーションの作成

Visual Studio を起動し、ユーザーが指定されたファイルへの書き込みに使用できるフォームを作成して、プロジェクトを開始します。

プロジェクトを作成するには

  1. [ファイル] メニューの [新しいプロジェクト] を選択します。

  2. [ 新しいプロジェクト ] ウィンドウで、[ Windows アプリケーション] をクリックします。

  3. [ 名前 ] ボックスに「 MyDiary 」と入力し、[OK] をクリック します

    Visual Studio によって ソリューション エクスプローラーにプロジェクトが追加され、 Windows フォーム デザイナー が開きます。

  4. 次の表のコントロールをフォームに追加し、そのプロパティに対応する値を設定します。

オブジェクト プロパティ 価値
Button 名前

テキスト
Submit

エントリの送信
Button 名前

テキスト
Clear

エントリのクリア
TextBox 名前

テキスト

複数行
Entry

何かを入力してください。

False

ファイルへの書き込み

アプリケーションを介してファイルに書き込む機能を追加するには、 StreamWriter クラスを使用します。 StreamWriter は特定のエンコードでの文字出力用に設計されています。一方、 Stream クラスはバイト入力と出力用に設計されています。 StreamWriterを使用して、標準のテキスト ファイルに情報行を書き込みます。 StreamWriter クラスの詳細については、「StreamWriter」を参照してください。

書き込み機能を追加するには

  1. [表示] メニューから [コード] を選択し、コード エディターを開きます。

  2. アプリケーションは System.IO 名前空間を参照するため、フォームのクラス宣言の前に、コードの先頭に次のステートメント Public Class Form1追加します。

    Imports System.IO
    

    ファイルに書き込む前に、 StreamWriter クラスのインスタンスを作成する必要があります。

  3. [表示] メニューの [デザイナー] を選択して、Windows フォーム デザイナーに戻ります。 Submit ボタンをダブルクリックして、ボタンのClick イベント ハンドラーを作成し、次のコードを追加します。

    Dim fw As StreamWriter
    

Visual Studio 統合開発環境 (IDE) はコード エディターに戻り、コードを追加する必要があるイベント ハンドラー内に挿入ポイントを配置します。

  1. ファイルに書き込むには、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
    
  2. Dim ReadString As Stringの直後に次のコードを追加して、ユーザーが空白のエントリを送信できないことを確認します。

    If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then
        Entry.Text = "Please enter something."
        Return
    End If
    
  3. これは日記であるため、ユーザーは各エントリに日付を割り当てる必要があります。 fw = New StreamWriter("C:\MyDiary.txt", True)の後に次のコードを挿入して、変数Todayを現在の日付に設定します。

    Dim Today As DateTime
    Today = Now
    fw.Write(CStr(Today))
    fw.Write(ControlChars.CrLf)
    
  4. 最後に、コードをアタッチして TextBoxをクリアします。 Clear ボタンの Click イベントに次のコードを追加します。

    Entry.Text = ""
    

日記に表示機能を追加する

このセクションでは、 DisplayEntryTextBoxに最新のエントリを表示する機能を追加します。 また、さまざまなエントリを表示し、ユーザーがDisplayEntryTextBoxに表示するエントリを選択できるComboBoxを追加することもできます。 StreamReader クラスのインスタンスは、MyDiary.txtから読み取ります。 StreamWriter クラスと同様に、StreamReaderはテキスト ファイルでの使用を目的としています。

チュートリアルのこのセクションでは、次の表のコントロールをフォームに追加し、そのプロパティに対応する値を設定します。

コントロール 特性 価値観
TextBox 名前

表示

サイズ

複数行
DisplayEntry

False

120,60

True
Button 名前

テキスト
Display

陳列
Button 名前

テキスト
GetEntries

エントリを取得する
ComboBox 名前

テキスト

有効
PickEntries

エントリを選択する

False

コンボ ボックスを設定するには

  1. 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
    
  2. コードをテストするには、F5 キーを押してアプリケーションをコンパイルし、[ エントリの取得] をクリックします。 ComboBoxのドロップダウン矢印をクリックして、入力日を表示します。

個々のエントリを選択して表示するには

  1. 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
    
  2. コードをテストするには、F5 キーを押してアプリケーションをコンパイルし、エントリを送信します。 [ エントリの取得] をクリックし、 ComboBoxからエントリを選択して、[ 表示] をクリックします。 選択したエントリの内容が DisplayEntryTextBoxに表示されます。

ユーザーがエントリを削除または変更できるようにする

最後に、 DeleteEntry ボタンと EditEntry ボタンを使用して、ユーザーがエントリを削除または変更できる追加機能を含めることができます。 エントリが表示されない限り、両方のボタンは無効のままです。

次の表のコントロールをフォームに追加し、そのプロパティに対応する値を設定します。

コントロール 特性 価値観
Button 名前

テキスト

有効
DeleteEntry

エントリの削除

False
Button 名前

テキスト

有効
EditEntry

エントリの編集

False
Button 名前

テキスト

有効
SubmitEdit

編集の送信

False

エントリの削除と変更を有効にするには

  1. DisplayEntry.Text = ReadStringした後、Display ボタンのClick イベントに次のコードを追加します。

    DeleteEntry.enabled = True
    
  2. 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
    
  3. ユーザーがエントリを表示すると、 EditEntry ボタンが有効になります。 DisplayEntry.Text = ReadStringした後、Display ボタンのClick イベントに次のコードを追加します。

    EditEntry.Enabled = True
    
  4. EditEntry ボタンのClick イベント ハンドラーを作成し、次のコードを追加します。

    Entry.Text = DisplayEntry.Text
    SubmitEdit.Enabled = True
    
  5. 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 キーを押してアプリケーションをコンパイルします。 [ エントリの取得] をクリックし、エントリを選択して、[ 表示] をクリックします。 エントリが DisplayEntryTextBoxに表示されます。 [ エントリの編集] をクリックします。 エントリが EntryTextBoxに表示されます。 Entry TextBoxのエントリを編集し、[編集の送信] をクリックします。 MyDiary.txt ファイルを開き、修正を確認します。 エントリを選択し、[ エントリの削除] をクリックします。 MessageBoxが確認を要求したら、[OK] をクリックします。 アプリケーションを閉じ、 MyDiary.txt を開いて削除を確認します。

こちらも参照ください