Поделиться через


Пошаговое руководство. Операции с файлами и каталогами в Visual Basic

Обновлен: Ноябрь 2007

В этом пошаговом руководстве дается введение в основы файлового ввода-вывода в Microsoft Visual Basic 2005. Чтобы продемонстрировать имеющиеся возможности, в примере создается небольшое приложение с именем FileExplorer, которое исследует текстовые файлы в каталоге и выводит сведения об атрибутах файла и времени последнего доступа к нему, а также первые 80 знаков файла. Кроме того, предоставляется возможность записать полученные сведения в файл журнала.

cahdzfxw.alert_note(ru-ru,VS.90).gifПримечание.

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

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

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

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

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

    Откроется диалоговое окно Создание проекта.

  2. В области Типы проектов нажмите кнопку Проекты Visual Basic и затем нажмите кнопку Приложение Windows в области Шаблоны.

  3. Задайте имя проекта, введя FileExplorer в поле Имя.

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

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

    Объект

    Свойства

    Значение

    TextBox

    Name

    Text

    txtDirectory

    Каталог

    Button

    Name

    Text

    btnSubmit

    Подтвердить

    Button

    Name

    Text

    btnExamine

    Исследовать

    ComboBox

    Name

    Text

    LstFilePick

    Выберите файл

    CheckBox

    Name

    Text

    Checked

    chkFileLength

    Размер файла

    True

    CheckBox

    Name

    Text

    Checked

    chkLastAccess

    Время последнего доступа

    True

    CheckBox

    Name

    Text

    Checked

    chkSave

    Сохранить результаты

    False

Отображение текущего каталога

Приложению FileExplorer нужна отправная точка. Соответственно,txtDirectoryTextBox использует функцию My.Computer.FileSystem.CurrentDirectory для получения и отображения строк, представляющих текущий путь.

Возврат текущего каталога

  1. Создайте обработчик событий для события Form1_Load, дважды щелкнув форму.

    Открывается редактор кода.

  2. Добавьте следующий код, чтобы в txtDirectoryTextBox отображался текущий каталог.

    txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory
    
  3. Запустите программу, чтобы проверить, правильный ли путь возвращается.

    В txtDirectoryTextBox отображается текущий каталог.

Смена каталога

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

Смена каталога

  1. Создайте обработчик событий нажатия кнопки для btnSubmit, дважды щелкнув этот элемент управления формы.

    Открывается редактор кода.

  2. Добавьте в обработчик событий Click для кнопки следующий код:

    Dim NewPath As String
    ' NewPath holds the path the user has entered.
    NewPath = txtDirectory.Text
    ' Change the location to NewPath.
    My.Computer.FileSystem.CurrentDirectory = NewPath
    

Проверка правильности введенного пути

Используйте инструкцию Try...Catch для перехвата исключений, возникающих вследствие ввода пустого или недопустимого пути.

Проверка правильности путей

  1. В событии btnSubmit_Click после строки кода Dim NewPath As String добавьте Dim ErrorMessage As String на новой строке.

  2. Перед строкой кода My.Computer.FileSystem.CurrentDirectory = NewPath добавьте оператор Try в отдельной строке следующим образом. Если нажать клавишу ВВОД, редактор кода автоматически вставит операторы Catch ex As Exception и End Try. Удалите их и добавьте на следующем шаге требуемые операторы.

    Try
    
  3. Добавьте следующий код под строкой My.Computer.FileSystem.CurrentDirectory = NewPath.

        ' This checks to make sure the path is not blank.
    Catch ex As Exception When NewPath = ""
        ErrorMessage = "You must enter a path."
        ' This catches errors caused by a path that is not valid.
    Catch
        ErrorMessage = "You must enter a valid path.  If trying " & _
        "to access a different drive, remember to include the drive " & _
        "letter."
    Finally
        ' Display the error message only if one exists.
        If ErrorMessage <> Nothing Then
            MsgBox(ErrorMessage)
        End If
    End Try
    

Отображение содержимого каталога в поле со списком

Чтобы дать возможность приложению отображать содержимое текущего каталога, можно использовать метод My.Computer.FileSystem.GetFiles, который возвращает набор строк, представляющих собой имена файлов в каталоге. С методом GetFiles можно использовать подстановочные знаки — это даст возможность выбирать только файлы, отвечающие определенному шаблону. В этом примере возвращаются только файлы с расширением TXT.

Отображение содержимого каталога

  1. В начале события btnSubmit_Click вставьте следующее.

    Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).

  2. После строки End Try вставьте следующее.

    fileList = My.Computer.FileSystem.GetFiles( _
        My.Computer.FileSystem.CurrentDirectory, _
        FileIO.SearchOption.SearchTopLevelOnly, "*.txt")
    For Each foundFile As String In fileList
        lstFilePick.Items.Add(foundFile)
    Next
    

    Собранные сведения отображаются в элементе управления lstFilePickComboBox, из которого можно выбрать определенный файл для проверки.

Проверьте приложение, задав сначала каталог без ТХТ-файлов, а затем каталог, содержащий несколько ТХТ-файлов. В первом случае приложение выдаст соответствующее сообщение об ошибке. Во втором случае приложение создаст в ComboBox перечень всех TXT-файлов из каталога, заданного в txtDirectoryTextBox.

Предоставление пользователю возможности выбрать файл для исследования

Хотя в элементе управления lstFilePickComboBox отображаются все файлы указанного каталога, у пользователя может возникнуть необходимость выбрать и исследовать определенный файл.

Предоставление возможности выбрать конкретный файл

  • Создайте для кнопки обработчик событий btnExamine_Click и добавьте следующий код для подтверждения выбора файла.

    Dim thisFile As System.IO.FileInfo
    thisFile = My.Computer.FileSystem.GetFileInfo(CStr(lstFilePick.SelectedItem))
    

Предоставление пользователю возможности определять, какую информацию следует собирать

Теперь, когда файлы отображены в списке поля lstFilePickComboBox, дополнительный код дает пользователю возможность указать, какие сведения ему нужны. Например, один пользователь может интересоваться лишь датой последнего обращения к файлу, а другой — еще и размером файла. Для настройки результатов пользователь устанавливает или снимает флажки (chkLastAccess, chkFileLength).

Отображение определенных сведений

  1. Объявите следующие переменные в начале события btnExamine_Click после (lstFilePick.SelectedItem).

    Dim stringlength As String
    stringLength = "The file's length, in bytes, is: "
    Dim stringLastAccess As String
    stringLastAccess = "The file was last accessed on: "
    Dim LastAccess As Date
    Dim Length As Long
    Dim FirstLine As String = ""
    Dim FinalString As String = ""
    Dim NewName As String
    NewName = CType(lstFilePick.SelectedItem, String)
    
    If NewName = Nothing Then
        MsgBox("You must select a file to examine.")
        Exit Sub
    End If
    

    Метод My.Computer.FileSystem.GetFileInfo возвращает объект FileInfo, к которому можно сделать запрос для получения сведений о файле.

  2. Добавьте следующий код в конец события btnExamine_Click.

    ' Check last access time.
    If chkLastAccess.Checked = True Then
        LastAccess = thisFile.LastAccessTime
    End If
    

Свойство LastAccessTime определяет время последнего доступа к файлу. Возвращаемое значение Date указывает дату и время, когда файл был создан или изменен в последний раз.

  1. Добавьте следующий код в конец события btnExamine_Click.

    ' Check Length.
    If chkFileLength.Checked = True Then
        Length = thisFile.Length
    End If
    

Свойство Length, которое определяет размер файла, возвращает значение Long, указывающее размер файла в байтах.

Отображение результатов

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

Отображение результатов

  1. В конце блока If, в котором проверяется, установлен ли флажок chkLastAccessCheckBox, добавьте следующий код перед оператором End If.

    ' Add to the messagebox.
    FinalString = FinalString & stringLastAccess & LastAccess & "." _
    & vbCrLf
    
  2. В конце блока If, в котором проверяется, установлен ли флажок chkFileLengthCheckBox, добавьте следующий код перед оператором End If.

    ' Add to the messagebox.
    FinalString = FinalString & stringlength & CStr(Length) & "." _
    & vbCrLf
    
  3. В конце блока If, в котором проверяется, установлен ли флажок chkFirstLineCheckBox, добавьте следующий код перед оператором End If.

    ' Add to the messagebox.
    FinalString &= FirstLine & vbCrLf
    

Сохранение результатов

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

Создание файла журнала

  • Добавьте следующее в конец события btnExamine_Click.

    ' Check to see if results should be saved.
    If chkSave.Checked = True And FinalString <> "" Then
        My.Computer.FileSystem.WriteAllText("log.txt", FinalString, True)
    End If
    

Тестирование приложения

  1. В выбранном на свое усмотрение каталоге создайте текстовый файл с именем test.txt, первая строка которого имеет следующий вид:

    "Это первая строка первого файла. Приложение FileExplorer исследует только текстовые файлы."

  2. В том же каталоге создайте второй текстовый файл с именем test2.txt, первая строка которого имеет следующий вид:

    "Это первая строка второго файла. Приложение FileExplorer исследует только текстовые файлы."

  3. Запустите приложение.

  4. Введите недопустимый путь и нажмите кнопку Подтвердить.

    Появится следующее сообщение: "Необходимо ввести допустимый путь. Если вы пытаетесь обратиться к другому диску, не забудьте указать букву диска."

  5. Введите путь к каталогу, содержащему файл test.txt, и нажмите кнопку Подтвердить.

    В элементе управления lstFilePickComboBox будут отображены текстовые файлы.

  6. Выберите файл test.txt в lstFilePickComboBox. Убедитесь, что все флажки установлены, и нажмите кнопку Исследовать.

    В форме с результатами будут отображены дата последнего доступа к файлу и размер файла.

  7. Выберите файл test2.txt в lstFilePickComboBox, снимите все флажки и нажмите кнопку Исследовать.

    Появится следующее сообщение об ошибке: "Не установлены флажки выбора атрибутов".

  8. Выберите и Время последнего доступа и Сохранить результаты и нажмите кнопку Исследовать.

    В форме с результатами будет отображено только время последнего доступа.

  9. Закройте приложение FileExplorer.

    Поскольку был установлен флажок Сохранить результаты, приложение FileExplorer создаст файл журнала с именем log.txt в том же каталоге, где находятся текстовые файлы.

Проверка журнала

  • В текущем каталоге откройте файл log.txt и убедитесь, что приложение FileExplorer записало правильные данные.

См. также

Ссылки

Свойство My.Computer.FileSystem.CurrentDirectory

Метод My.Computer.FileSystem.GetFileInfo