Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом пошаговом руководстве приведены общие сведения о принципах ввода-вывода файлов в Visual Basic. В нем описывается создание небольшого приложения, которое перечисляет и проверяет текстовые файлы в каталоге. Для каждого выбранного текстового файла приложение предоставляет атрибуты файла и первую строку содержимого. Существует возможность записи сведений в файл журнала.
В этом пошаговом руководстве используются элементы My.Computer.FileSystem Object
, которые доступны в Visual Basic. См. FileSystem для получения дополнительной информации. В конце пошагового руководства приведен эквивалентный пример, использующий классы из System.IO пространства имен.
Замечание
На компьютере могут отображаться различные имена или расположения для некоторых элементов пользовательского интерфейса Visual Studio в следующих инструкциях. Выпуск Visual Studio, который у вас есть, и параметры, которые вы используете, определяют эти элементы. Дополнительные сведения см. в разделе Персонализация интегрированной среды разработки.
Создание проекта
На меню Файл щелкните Новый проект.
Откроется диалоговое окно Создание проекта .
В области установленных шаблонов разверните Visual Basic и щелкните Windows. В области "Шаблоны " в середине щелкните "Приложение Windows Forms".
В поле "Имя" введите
FileExplorer
имя проекта и нажмите кнопку "ОК".Visual Studio добавляет проект в обозреватель решений, и откроется конструктор Windows Forms.
Добавьте элементы управления в следующую таблицу в форму и задайте соответствующие значения для их свойств.
Контроль Недвижимость Ценность ListBox Имя filesListBox
Кнопка Имя
ТекстbrowseButton
ПросмотрКнопка Имя
ТекстexamineButton
ИзучатьФлажок Имя
ТекстsaveCheckBox
Сохранение результатовFolderBrowserDialog Имя FolderBrowserDialog1
Выбор папки и перечисление файлов в папке
Дважды щелкнув элемент управления на форме, создайте обработчик событий
Click
browseButton
. Откроется редактор кода.Добавьте следующий код в обработчик событий
Click
.If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ' List files in the folder. ListFiles(FolderBrowserDialog1.SelectedPath) End If
Вызов открывает диалоговое
FolderBrowserDialog1.ShowDialog
окно "Обзор папки ". После нажатия кнопки ОКSelectedPath свойство отправляется в качестве аргументаListFiles
методу, который добавляется на следующем шаге.Добавьте следующий
ListFiles
метод.Private Sub ListFiles(ByVal folderPath As String) filesListBox.Items.Clear() Dim fileNames = My.Computer.FileSystem.GetFiles( folderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.txt") For Each fileName As String In fileNames filesListBox.Items.Add(fileName) Next End Sub
Этот код сначала очищает ListBox.
Затем GetFiles метод извлекает коллекцию строк, по одному для каждого файла в каталоге. Метод
GetFiles
принимает аргумент шаблона поиска для получения файлов, соответствующих определенному шаблону. В этом примере возвращаются только файлы с расширением .txt.Затем строки, возвращаемые методом
GetFiles
, добавляются в ListBox.Запустите приложение. Нажмите кнопку Обзор. В диалоговом окне "Обзор папки" перейдите к папке, содержащей .txt файлы, а затем выберите папку и нажмите кнопку "ОК".
Элемент
ListBox
содержит список файлов .txt в выбранной папке.Остановите запуск приложения.
Получение атрибутов файла и содержимого из текстового файла
Дважды щелкнув элемент управления на форме, создайте обработчик событий
Click
examineButton
.Добавьте следующий код в обработчик событий
Click
.If filesListBox.SelectedItem Is Nothing Then MessageBox.Show("Please select a file.") Exit Sub End If ' Obtain the file path from the list box selection. Dim filePath = filesListBox.SelectedItem.ToString ' Verify that the file was not removed since the ' Browse button was clicked. If My.Computer.FileSystem.FileExists(filePath) = False Then MessageBox.Show("File Not Found: " & filePath) Exit Sub End If ' Obtain file information in a string. Dim fileInfoText As String = GetTextForOutput(filePath) ' Show the file information. MessageBox.Show(fileInfoText)
Код проверяет, выбран ли элемент в компоненте
ListBox
. Затем он получает запись пути к файлу изListBox
. Метод FileExists используется для проверки того, существует ли файл.Путь к файлу отправляется в качестве аргумента
GetTextForOutput
методу, который добавляется на следующем шаге. Этот метод возвращает строку, содержащую сведения о файле. Сведения о файле отображаются в MessageBox.Добавьте следующий
GetTextForOutput
метод.Private Function GetTextForOutput(ByVal filePath As String) As String ' Verify that the file exists. If My.Computer.FileSystem.FileExists(filePath) = False Then Throw New Exception("File Not Found: " & filePath) End If ' Create a new StringBuilder, which is used ' to efficiently build strings. Dim sb As New System.Text.StringBuilder() ' Obtain file information. Dim thisFile As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath) ' Add file attributes. sb.Append("File: " & thisFile.FullName) sb.Append(vbCrLf) sb.Append("Modified: " & thisFile.LastWriteTime.ToString) sb.Append(vbCrLf) sb.Append("Size: " & thisFile.Length.ToString & " bytes") sb.Append(vbCrLf) ' Open the text file. Dim sr As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(filePath) ' Add the first line from the file. If sr.Peek() >= 0 Then sb.Append("First Line: " & sr.ReadLine()) End If sr.Close() Return sb.ToString End Function
Код использует GetFileInfo метод для получения параметров файла. Параметры файла добавляются в StringBuilder.
Метод OpenTextFileReader считывает содержимое файла в объект StreamReader. Первая строка содержимого извлекается из
StreamReader
и добавляется вStringBuilder
.Запустите приложение. Нажмите кнопку "Обзор" и перейдите к папке, содержащей .txt файлы. Нажмите кнопку ОК.
Выберите файл в списке
ListBox
, а затем нажмите кнопку "Проверить". ОтображаетсяMessageBox
информация о файле.Остановите запуск приложения.
Добавление записи журнала
Добавьте следующий код в конец обработчика
examineButton_Click
событий.If saveCheckBox.Checked = True Then ' Place the log file in the same folder as the examined file. Dim logFolder As String = My.Computer.FileSystem.GetFileInfo(filePath).DirectoryName Dim logFilePath = My.Computer.FileSystem.CombinePath(logFolder, "log.txt") Dim logText As String = "Logged: " & Date.Now.ToString & vbCrLf & fileInfoText & vbCrLf & vbCrLf ' Append text to the log file. My.Computer.FileSystem.WriteAllText(logFilePath, logText, append:=True) End If
Код задает путь к файлу журнала, чтобы поместить файл журнала в тот же каталог, что и выбранный файл. Текст записи в журнале содержит текущие дату и время, а затем информацию о файле.
Метод WriteAllText с заданным аргументом
append
True
используется для создания записи журнала.Запустите приложение. Перейдите к текстовому файлу, выберите его в
ListBox
поле , установите флажок "Сохранить результаты " и нажмите кнопку "Проверить". Убедитесь, что запись журнала записывается вlog.txt
файл.Остановите запуск приложения.
Использование текущего каталога
Дважды щелкнув форму, создайте обработчик событий для
Form1_Load
.Добавьте следующий код в обработчик событий.
' Set the default directory of the folder browser to the current directory. FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory
Этот код задает каталог по умолчанию браузера папок для текущего каталога.
Запустите приложение. При первом нажатии кнопки "Обзор папки" откроется диалоговое окно "Обзор папки " в текущем каталоге.
Остановите запуск приложения.
Выборочное включение элементов управления
Добавьте следующий
SetEnabled
метод.Private Sub SetEnabled() Dim anySelected As Boolean = (filesListBox.SelectedItem IsNot Nothing) examineButton.Enabled = anySelected saveCheckBox.Enabled = anySelected End Sub
Метод
SetEnabled
включает или отключает элементы управления в зависимости от того, выбран ли элемент в элементеListBox
.Создайте обработчик событий
SelectedIndexChanged
, дважды щелкнув элемент управленияfilesListBox
на формеListBox
.Добавьте вызов
SetEnabled
в новыйfilesListBox_SelectedIndexChanged
обработчик событий.Добавьте вызов
SetEnabled
в конец обработчикаbrowseButton_Click
событий.Добавьте вызов
SetEnabled
в конец обработчикаForm1_Load
событий.Запустите приложение. Флажок "Сохранить результаты " и кнопка "Проверить " отключена, если элемент не выбран в элементе
ListBox
.
Полный пример использования My.Computer.FileSystem
Ниже приведен полный пример.
' This example uses members of the My.Computer.FileSystem
' object, which are available in Visual Basic.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Set the default directory of the folder browser to the current directory.
FolderBrowserDialog1.SelectedPath = My.Computer.FileSystem.CurrentDirectory
SetEnabled()
End Sub
Private Sub browseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles browseButton.Click
If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
' List files in the folder.
ListFiles(FolderBrowserDialog1.SelectedPath)
End If
SetEnabled()
End Sub
Private Sub ListFiles(ByVal folderPath As String)
filesListBox.Items.Clear()
Dim fileNames = My.Computer.FileSystem.GetFiles(
folderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.txt")
For Each fileName As String In fileNames
filesListBox.Items.Add(fileName)
Next
End Sub
Private Sub examineButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles examineButton.Click
If filesListBox.SelectedItem Is Nothing Then
MessageBox.Show("Please select a file.")
Exit Sub
End If
' Obtain the file path from the list box selection.
Dim filePath = filesListBox.SelectedItem.ToString
' Verify that the file was not removed since the
' Browse button was clicked.
If My.Computer.FileSystem.FileExists(filePath) = False Then
MessageBox.Show("File Not Found: " & filePath)
Exit Sub
End If
' Obtain file information in a string.
Dim fileInfoText As String = GetTextForOutput(filePath)
' Show the file information.
MessageBox.Show(fileInfoText)
If saveCheckBox.Checked = True Then
' Place the log file in the same folder as the examined file.
Dim logFolder As String = My.Computer.FileSystem.GetFileInfo(filePath).DirectoryName
Dim logFilePath = My.Computer.FileSystem.CombinePath(logFolder, "log.txt")
Dim logText As String = "Logged: " & Date.Now.ToString &
vbCrLf & fileInfoText & vbCrLf & vbCrLf
' Append text to the log file.
My.Computer.FileSystem.WriteAllText(logFilePath, logText, append:=True)
End If
End Sub
Private Function GetTextForOutput(ByVal filePath As String) As String
' Verify that the file exists.
If My.Computer.FileSystem.FileExists(filePath) = False Then
Throw New Exception("File Not Found: " & filePath)
End If
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New System.Text.StringBuilder()
' Obtain file information.
Dim thisFile As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath)
' Add file attributes.
sb.Append("File: " & thisFile.FullName)
sb.Append(vbCrLf)
sb.Append("Modified: " & thisFile.LastWriteTime.ToString)
sb.Append(vbCrLf)
sb.Append("Size: " & thisFile.Length.ToString & " bytes")
sb.Append(vbCrLf)
' Open the text file.
Dim sr As System.IO.StreamReader =
My.Computer.FileSystem.OpenTextFileReader(filePath)
' Add the first line from the file.
If sr.Peek() >= 0 Then
sb.Append("First Line: " & sr.ReadLine())
End If
sr.Close()
Return sb.ToString
End Function
Private Sub filesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filesListBox.SelectedIndexChanged
SetEnabled()
End Sub
Private Sub SetEnabled()
Dim anySelected As Boolean =
(filesListBox.SelectedItem IsNot Nothing)
examineButton.Enabled = anySelected
saveCheckBox.Enabled = anySelected
End Sub
Полный пример использования System.IO
В следующем эквивалентном примере используются классы из System.IO пространства имен вместо использования My.Computer.FileSystem
объектов.
' This example uses classes from the System.IO namespace.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Set the default directory of the folder browser to the current directory.
FolderBrowserDialog1.SelectedPath =
System.IO.Directory.GetCurrentDirectory()
SetEnabled()
End Sub
Private Sub browseButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles browseButton.Click
If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then
' List files in the folder.
ListFiles(FolderBrowserDialog1.SelectedPath)
SetEnabled()
End If
End Sub
Private Sub ListFiles(ByVal folderPath As String)
filesListBox.Items.Clear()
Dim fileNames As String() =
System.IO.Directory.GetFiles(folderPath,
"*.txt", System.IO.SearchOption.TopDirectoryOnly)
For Each fileName As String In fileNames
filesListBox.Items.Add(fileName)
Next
End Sub
Private Sub examineButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles examineButton.Click
If filesListBox.SelectedItem Is Nothing Then
MessageBox.Show("Please select a file.")
Exit Sub
End If
' Obtain the file path from the list box selection.
Dim filePath = filesListBox.SelectedItem.ToString
' Verify that the file was not removed since the
' Browse button was clicked.
If System.IO.File.Exists(filePath) = False Then
MessageBox.Show("File Not Found: " & filePath)
Exit Sub
End If
' Obtain file information in a string.
Dim fileInfoText As String = GetTextForOutput(filePath)
' Show the file information.
MessageBox.Show(fileInfoText)
If saveCheckBox.Checked = True Then
' Place the log file in the same folder as the examined file.
Dim logFolder As String =
System.IO.Path.GetDirectoryName(filePath)
Dim logFilePath = System.IO.Path.Combine(logFolder, "log.txt")
' Append text to the log file.
Dim logText As String = "Logged: " & Date.Now.ToString &
vbCrLf & fileInfoText & vbCrLf & vbCrLf
System.IO.File.AppendAllText(logFilePath, logText)
End If
End Sub
Private Function GetTextForOutput(ByVal filePath As String) As String
' Verify that the file exists.
If System.IO.File.Exists(filePath) = False Then
Throw New Exception("File Not Found: " & filePath)
End If
' Create a new StringBuilder, which is used
' to efficiently build strings.
Dim sb As New System.Text.StringBuilder()
' Obtain file information.
Dim thisFile As New System.IO.FileInfo(filePath)
' Add file attributes.
sb.Append("File: " & thisFile.FullName)
sb.Append(vbCrLf)
sb.Append("Modified: " & thisFile.LastWriteTime.ToString)
sb.Append(vbCrLf)
sb.Append("Size: " & thisFile.Length.ToString & " bytes")
sb.Append(vbCrLf)
' Open the text file.
Dim sr As System.IO.StreamReader =
System.IO.File.OpenText(filePath)
' Add the first line from the file.
If sr.Peek() >= 0 Then
sb.Append("First Line: " & sr.ReadLine())
End If
sr.Close()
Return sb.ToString
End Function
Private Sub filesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filesListBox.SelectedIndexChanged
SetEnabled()
End Sub
Private Sub SetEnabled()
Dim anySelected As Boolean =
(filesListBox.SelectedItem IsNot Nothing)
examineButton.Enabled = anySelected
saveCheckBox.Enabled = anySelected
End Sub