Пошаговое руководство. Управление файлами с помощью методов .NET Framework (Visual Basic)

В этом пошаговом руководстве демонстрируются открытие и чтение файла с помощью класса StreamReader, проверка доступа к файлу, поиск строки в файле, считанном с помощью экземпляра класса StreamReader, и запись в файл с помощью класса StreamWriter.

Примечание.

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.

Создание приложения

Запустите Visual Studio и начните проект с создания формы, которую пользователь сможет использовать для записи в намеченный файл.

Создание проекта

  1. В меню Файл выберите пункт Создать проект.

  2. В области Новый проект щелкните Приложения Windows.

  3. В поле Имя введите MyDiary, а затем нажмите кнопку ОК.

    Visual Studio добавит проект в обозреватель решений, после чего откроется конструктор Windows Forms.

  4. Добавьте в форму элементы управления из следующей таблицы и установите для их свойств соответствующие значения.

Объект Свойства Value
Button Имя

Текст
Submit

Сохранить запись
Button Имя

Текст
Clear

Очистить запись
TextBox Имя

Текст

Multiline
Entry

Введите произвольный текст.

False

Запись в файл

Чтобы добавить возможность записи в файл с помощью приложения, воспользуйтесь классом StreamWriter. Класс StreamWriter предназначен для вывода символов в определенной кодировке, тогда как класс Stream предназначен для ввода и вывода двоичных данных. Класс StreamWriter следует использовать для записи строк данных в стандартный текстовый файл. Дополнительные сведения о классе StreamWriter см. в статье StreamWriter.

Добавление возможности записи

  1. В меню Вид выберите пункт Код, чтобы открыть редактор кода.

  2. Поскольку приложение ссылается на пространство имен System.IO, следует добавить следующие операторы в самом начале кода перед объявлением класса для формы, которое начинается с Public Class Form1.

    Imports System.IO
    

    Перед записью в файл необходимо создать экземпляр класса StreamWriter.

  3. В меню Вид выберите пункт Конструктор для возврата в окно Конструктор Windows Forms. Дважды щелкните кнопку Submit, чтобы создать для нее обработчик событий Click, а затем добавьте в него следующий код.

    Dim fw As StreamWriter
    

Примечание.

Интегрированная среда разработки (IDE) Visual Studio откроет редактор кода, а курсор будет помещен внутрь обработчика события, в который и следует добавить код.

  1. Для записи в файл используйте метод Write класса StreamWriter. Добавьте следующий код сразу после 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. Вы также можете добавить элемент ComboBox, который отображает разные записи и позволяет выбрать запись для отображения в DisplayEntryTextBox. Экземпляр класса StreamReader считывает информацию из MyDiary.txt. Как и класс StreamWriter, StreamReader предназначен для использования с текстовыми файлами.

Для реализации следующей части пошагового руководства необходимо добавить в форму элементы управления из следующей таблицы и присвоить соответствующие значения их свойствам.

CONTROL Свойства Values
TextBox Имя

Visible

Размер

Multiline
DisplayEntry

False

120,60

True
Button Имя

Текст
Display

Отображение
Button Имя

Текст
GetEntries

Показать записи
ComboBox Имя

Текст

Включено
PickEntries

Выберите запись

False

Заполнение элемента управления ComboBox

  1. Элемент управления PickEntriesComboBox используется для отображения даты создания каждой записи, чтобы пользователь мог выбрать запись за определенную дату. Создайте обработчик события Click для кнопки GetEntries и добавьте в него следующий код.

    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. Создайте обработчик события Click для кнопки Display и добавьте в него следующий код.

    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. Обе кнопки неактивны, пока не выбрана ни одна запись.

Добавьте в форму элементы управления из следующей таблицы и установите для их свойств соответствующие значения.

CONTROL Свойства Values
Button Имя

Текст

Включено
DeleteEntry

Удалить запись

False
Button Имя

Текст

Включено
EditEntry

Изменить запись

False
Button Имя

Текст

Включено
SubmitEdit

Сохранить изменения

False

Включение возможности удаления и изменения записей

  1. Добавьте следующий код в обработчик события Display для кнопки Click после элемента DisplayEntry.Text = ReadString.

    DeleteEntry.enabled = True
    
  2. Создайте обработчик события Click для кнопки DeleteEntry и добавьте в него следующий код.

    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 становится доступной. Добавьте следующий код в обработчик событий Click для кнопки Display после элемента DisplayEntry.Text = ReadString.

    EditEntry.Enabled = True
    
  4. Создайте обработчик события Click для кнопки EditEntry и добавьте в него следующий код.

    Entry.Text = DisplayEntry.Text
    SubmitEdit.Enabled = True
    
  5. Создайте обработчик события Click для кнопки SubmitEdit и добавьте в него следующий код.

    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. Измените запись в EntryTextBox и щелкните действие Submit Edit (Отправить изменения). Откройте MyDiary.txt файл, чтобы убедиться, что изменения внесены. Теперь выберите запись и нажмите кнопку Удалить запись. Когда MessageBox запросит подтверждение, нажмите кнопку ОК. Закройте приложение и откройте файл MyDiary.txt для подтверждения удаления.

См. также