Пошаговое руководство. Операции с файлами и каталогами в Visual Basic
Обновлен: Ноябрь 2007
В этом пошаговом руководстве дается введение в основы файлового ввода-вывода в Microsoft Visual Basic 2005. Чтобы продемонстрировать имеющиеся возможности, в примере создается небольшое приложение с именем FileExplorer, которое исследует текстовые файлы в каталоге и выводит сведения об атрибутах файла и времени последнего доступа к нему, а также первые 80 знаков файла. Кроме того, предоставляется возможность записать полученные сведения в файл журнала.
Примечание. |
---|
Доступные в диалоговых окнах параметры, а также названия и расположение команд меню могут отличаться от описанных в справке в зависимости от текущих параметров или версии. При написании этой страницы справки имелось в виду окно Общие параметры разработки. Чтобы изменить настройки, в меню Сервисвыберите командуИмпорт и экспорт параметров. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Создание приложения
Чтобы начать проект, создайте форму, в которой можно будет выбрать каталог, выберите файл из каталога, а затем выберите сведения, которые необходимо извлечь о файле.
Создание проекта
В меню Файл выберите команду Создать, затем выберите пункт Проект.
Откроется диалоговое окно Создание проекта.
В области Типы проектов нажмите кнопку Проекты Visual Basic и затем нажмите кнопку Приложение Windows в области Шаблоны.
Задайте имя проекта, введя FileExplorer в поле Имя.
Visual Studio добавит проект в Обозреватель решений, и откроется окно конструктора Windows Forms.
Добавьте в форму элементы управления из следующей таблицы и установите для их свойств соответствующие значения.
Объект
Свойства
Значение
Name
Text
txtDirectory
Каталог
Name
Text
btnSubmit
Подтвердить
Name
Text
btnExamine
Исследовать
Name
Text
LstFilePick
Выберите файл
Name
Text
Checked
chkFileLength
Размер файла
True
Name
Text
Checked
chkLastAccess
Время последнего доступа
True
Name
Text
Checked
chkSave
Сохранить результаты
False
Отображение текущего каталога
Приложению FileExplorer нужна отправная точка. Соответственно,txtDirectoryTextBox использует функцию My.Computer.FileSystem.CurrentDirectory для получения и отображения строк, представляющих текущий путь.
Возврат текущего каталога
Создайте обработчик событий для события Form1_Load, дважды щелкнув форму.
Открывается редактор кода.
Добавьте следующий код, чтобы в txtDirectoryTextBox отображался текущий каталог.
txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory
Запустите программу, чтобы проверить, правильный ли путь возвращается.
В txtDirectoryTextBox отображается текущий каталог.
Смена каталога
Поскольку может возникнуть необходимость выбрать файлы в другом каталоге, приложение использует то же свойство для переключения между каталогами. Чтобы перейти в другой каталог, пользователь вводит новый путь в txtDirectoryTextBox.
Смена каталога
Создайте обработчик событий нажатия кнопки для btnSubmit, дважды щелкнув этот элемент управления формы.
Открывается редактор кода.
Добавьте в обработчик событий 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 для перехвата исключений, возникающих вследствие ввода пустого или недопустимого пути.
Проверка правильности путей
В событии btnSubmit_Click после строки кода Dim NewPath As String добавьте Dim ErrorMessage As String на новой строке.
Перед строкой кода My.Computer.FileSystem.CurrentDirectory = NewPath добавьте оператор Try в отдельной строке следующим образом. Если нажать клавишу ВВОД, редактор кода автоматически вставит операторы Catch ex As Exception и End Try. Удалите их и добавьте на следующем шаге требуемые операторы.
Try
Добавьте следующий код под строкой 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.
Отображение содержимого каталога
В начале события btnSubmit_Click вставьте следующее.
Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).
После строки 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).
Отображение определенных сведений
Объявите следующие переменные в начале события 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, к которому можно сделать запрос для получения сведений о файле.
Добавьте следующий код в конец события btnExamine_Click.
' Check last access time. If chkLastAccess.Checked = True Then LastAccess = thisFile.LastAccessTime End If
Свойство LastAccessTime определяет время последнего доступа к файлу. Возвращаемое значение Date указывает дату и время, когда файл был создан или изменен в последний раз.
Добавьте следующий код в конец события btnExamine_Click.
' Check Length. If chkFileLength.Checked = True Then Length = thisFile.Length End If
Свойство Length, которое определяет размер файла, возвращает значение Long, указывающее размер файла в байтах.
Отображение результатов
Завершающий элемент функциональности программы — отображение собранных сведений в окне сообщения MsgBox.
Отображение результатов
В конце блока If, в котором проверяется, установлен ли флажок chkLastAccessCheckBox, добавьте следующий код перед оператором End If.
' Add to the messagebox. FinalString = FinalString & stringLastAccess & LastAccess & "." _ & vbCrLf
В конце блока If, в котором проверяется, установлен ли флажок chkFileLengthCheckBox, добавьте следующий код перед оператором End If.
' Add to the messagebox. FinalString = FinalString & stringlength & CStr(Length) & "." _ & vbCrLf
В конце блока 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
Тестирование приложения
В выбранном на свое усмотрение каталоге создайте текстовый файл с именем test.txt, первая строка которого имеет следующий вид:
"Это первая строка первого файла. Приложение FileExplorer исследует только текстовые файлы."
В том же каталоге создайте второй текстовый файл с именем test2.txt, первая строка которого имеет следующий вид:
"Это первая строка второго файла. Приложение FileExplorer исследует только текстовые файлы."
Запустите приложение.
Введите недопустимый путь и нажмите кнопку Подтвердить.
Появится следующее сообщение: "Необходимо ввести допустимый путь. Если вы пытаетесь обратиться к другому диску, не забудьте указать букву диска."
Введите путь к каталогу, содержащему файл test.txt, и нажмите кнопку Подтвердить.
В элементе управления lstFilePickComboBox будут отображены текстовые файлы.
Выберите файл test.txt в lstFilePickComboBox. Убедитесь, что все флажки установлены, и нажмите кнопку Исследовать.
В форме с результатами будут отображены дата последнего доступа к файлу и размер файла.
Выберите файл test2.txt в lstFilePickComboBox, снимите все флажки и нажмите кнопку Исследовать.
Появится следующее сообщение об ошибке: "Не установлены флажки выбора атрибутов".
Выберите и Время последнего доступа и Сохранить результаты и нажмите кнопку Исследовать.
В форме с результатами будет отображено только время последнего доступа.
Закройте приложение FileExplorer.
Поскольку был установлен флажок Сохранить результаты, приложение FileExplorer создаст файл журнала с именем log.txt в том же каталоге, где находятся текстовые файлы.
Проверка журнала
- В текущем каталоге откройте файл log.txt и убедитесь, что приложение FileExplorer записало правильные данные.