次の方法で共有


チュートリアル: .NET Framework のメソッドによるファイル操作 (Visual Basic)

このチュートリアルでは、StreamReader クラスによるファイルのオープンと読み取り、ファイルがアクセス中かどうかのチェック、StreamReader クラスのインスタンスによって読み取ったファイルからの文字列の検索、StreamWriter クラスによるファイルへの書き込みの方法を説明します。

注意

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

アプリケーションの作成

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

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

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

  2. 新しいプロジェクト ペインの [Windows アプリケーション] をクリックします。

  3. [プロジェクト名] ボックスに「MyDiary」と入力し、[OK] をクリックします。

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

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

オブジェクト

プロパティ

Button

[名前]

Text

Submit

Submit Entry

Button

[名前]

Text

Clear

Clear Entry

TextBox

[名前]

Text

Multiline

Entry

Please enter something.

False

ファイルへの書き込み

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

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

  1. [表示] メニューの [コード] をクリックして、コード エディターを開きます。

  2. アプリケーションが System.IO 名前空間を参照できるように、コードの最初、つまり Public Class Form1 で始まるフォームのクラス宣言の前に、次のステートメントを追加します。

    Imports System
    Imports System.IO
    

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

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

    Dim fw As StreamWriter
    

注意

コード エディターに戻り、コードを追加するイベント ハンドラーにカーソルを配置する動作は、Visual Studio 統合開発環境 (IDE: Integrated Development Environment) によって行われます。

  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. ユーザーが何も入力しないで [Submit Entry] をクリックすることがないように、Dim ReadString As String の直後に次のコードを追加します。

    If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then
        Entry.Text = "Please enter something."
        Return
    End If
    
  3. これは日記なので、入力のたびに日付が入るようにします。 Today 変数を現在の日付に設定するために、fw = New StreamWriter("C:\MyDiary.txt", True) の後に次のコードを挿入します。

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

    Entry.Text = ""
    

日記の表示機能の追加

このセクションでは、DisplayEntry TextBox に最新のエントリを表示する機能を追加します。 また、さまざまなエントリを表示する ComboBox を追加し、ユーザーがそこからエントリを選択して DisplayEntry TextBox に表示できるようにします。 StreamReader クラスのインスタンスでは、MyDiary.txt から読み込みを行います。 StreamReader は、StreamWriter クラスと同じく、テキスト ファイルに対して使用するためのものです。

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

コントロール

プロパティ

TextBox

名前

Visible

サイズ

Multiline

DisplayEntry

False

120,60

True

Button

[名前]

Text

表示

表示

Button

[名前]

Text

GetEntries

Get Entries

ComboBox

[名前]

Text

Enabled

PickEntries

Select an Entry

False

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

  1. PickEntries ComboBox を使用して、ユーザーが各エントリを送信 (Submit) した日付を表示します。ユーザーは、そこから特定の日付のエントリを選択できます。 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 キーを押してアプリケーションをコンパイルし、[Get Entries] をクリックします。 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 キーを押してアプリケーションをコンパイルし、エントリを送信します。 [Get Entries] をクリックし、ComboBox からエントリを選択して、[Display] をクリックします。 選択したエントリの内容が DisplayEntry TextBox に表示されます。

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

DeleteEntry ボタンと EditEntry ボタンを使用してユーザーがエントリを削除または変更できる機能を追加できます エントリが表示されるまでは、どちらのボタンも無効にします。

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

コントロール

プロパティ

Button

[名前]

Text

Enabled

DeleteEntry

Delete Entry

False

Button

[名前]

Text

Enabled

EditEntry

Edit Entry

False

Button

[名前]

Text

Enabled

SubmitEdit

Submit Edit

False

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

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

    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 ボタンが有効になるようにします。 Display ボタンの Click イベントにある DisplayEntry.Text = ReadString の後に次のコードを追加します。

    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 キーを押してアプリケーションをコンパイルします。 [Get Entries] をクリックし、エントリを選択して、[Display] をクリックします。 DisplayEntry TextBox にエントリが表示されます。 [Edit Entry] をクリックします。 Entry TextBox にエントリが表示されます。 Entry TextBox の入力内容を編集し、[Submit Edit] をクリックします。 MyDiary.txt ファイルを開いて修正内容を確認します。 次に、エントリを選択し、[Delete Entry] をクリックします。 確認を求める MessageBox が表示されたら、[OK] をクリックします。 アプリケーションを終了し、MyDiary.txt を開いて削除を確認します。

参照

参照

StreamReader

StreamWriter

その他の技術情報

Visual Basic 言語のチュートリアル