次の方法で共有


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

更新 : 2007 年 11 月

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

1xac6e1y.alert_note(ja-jp,VS.90).gifメモ :

使用している設定またはエディションによっては、ダイアログ ボックスで使用可能なオプションや、メニュー コマンドの名前や位置がヘルプに記載されている内容と異なる場合があります。このヘルプ ページは、全般的な開発設定を考慮して記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

アプリケーションの作成

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

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

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

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

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

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

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

    オブジェクト

    プロパティ

    Button

    Name

    Text

    Submit

    Submit Entry

    Button

    Name

    Text

    Clear

    Clear Entry

    TextBox

    Name

    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
    
1xac6e1y.alert_note(ja-jp,VS.90).gifメモ :

コード エディタに戻り、コードを追加するイベント ハンドラにカーソルを配置する動作は、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 = ""
    

日記の表示機能の追加

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

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

コントロール

プロパティ

TextBox

Name

Visible

Size

Multiline

DisplayEntry

False

120,60

True

Button

Name

Text

Display

Display

Button

Name

Text

GetEntries

Get Entries

ComboBox

Name

Text

Enabled

PickEntries

Select an Entry

False

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

  1. PickEntriesComboBox を使用して、ユーザーが各エントリを送信 (Submit) した日付を表示します。ユーザーは、そこから特定の日付のエントリを選択できます。GetEntries ボタンの Click イベント ハンドラを作成し、次のコードを追加します。

    Dim fr As StreamReader
    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] をクリックします。選択したエントリの内容が DisplayEntryTextBox に表示されます。

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

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

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

コントロール

プロパティ

Button

Name

Text

Enabled

DeleteEntry

Delete Entry

False

Button

Name

Text

Enabled

EditEntry

Edit Entry

False

Button

Name

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

参照

参照

StreamReader

StreamWriter

その他の技術情報

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