次の方法で共有


チュートリアル: .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. 次の表に示すコントロールをフォームに追加し、対応する値をプロパティに設定します。

Object

プロパティ

Button

名前

テキスト

Submit

Submit Entry

Button

名前

テキスト

Clear

Clear Entry

TextBox

名前

テキスト

Multiline

エントリ

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 クラスと同じく、テキスト ファイルに対して使用するためのものです。

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

Control

プロパティ

Values

TextBox

名前

Visible

サイズ

Multiline

DisplayEntry

False

120,60

True

Button

名前

テキスト

表示

表示

Button

名前

テキスト

GetEntries

Get Entries

ComboBox

名前

テキスト

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

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

Control

プロパティ

Values

Button

名前

テキスト

Enabled

DeleteEntry

Delete Entry

False

Button

名前

テキスト

Enabled

EditEntry

Edit Entry

False

Button

名前

テキスト

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 言語のチュートリアル