Vb net прочитать текстовый файл
The StreamReader and StreamWriter classes are used for reading from and writing data to text files. These classes inherit from the abstract base class Stream, which supports reading and writing bytes into a file stream.
Example
The following example demonstrates writing text data into a file using the StreamWriter class −
When the above code is compiled and executed, it produces the following result −
В этом пошаговом руководстве приводятся основные сведения о файловом вводе-выводе в Visual Basic. В нем описывается создание небольшого приложения, перечисляющего текстовые файлы в каталоге и анализирующего их. Для каждого выбранного текстового файла приложение предоставляет атрибуты файла и первую строку содержимого. Кроме того, предоставляется возможность записать информацию в файл журнала.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Чтение из файла и StreamReader
Класс StreamReader позволяет читать из текстового файла весь текст или отдельные строки. Рассмотрим основные его методы:
Метод Close закрывает файл и освобождает поток
Метод Peek возвращает следующий доступный символ, если символов больше нет, то возвращает -1
Метод Read считывает и возвращает следующий символ в численном представлении. Имеет перегруженную версию: Read(array As Char(), index As Integer, count As Integer) , где array - массив, куда считываются символы, index - индекс в массиве array, начиная с которого записываются считываемые символы, и count - максимальное количество считываемых символов
Метод ReadLine считывает одну строку из файла
Метод ReadToEnd считывает из файла весь текст
Считаем текст из файла различными способами:
Как и в случае с классом FileStream здесь используется конструкция Using .
В первом случае мы разом считываем весь текст с помощью метода ReadToEnd() .
Во втором случае в цикле While считываем построчно. Когда объект reader дойдет до конца файла и больше строк не останется, то метод reade.ReadLine() вернет значение Nothing.
В третьем случае считываем в массив четыре символа.
Обратите внимание, что в последних двух случаях в конструкторе StreamReader указывалась кодировка System.Text.Encoding.UTF8 . Если нам известна кодировка файла, то мы можем ее указать при чтении файла. Также через другие свойства мы можем указать другие кодировки. Если кодировка не указана, то по умолчанию при чтении используется UTF8 . Иногда важно указывать кодировку, так как она может отличаться от UTF8, и тогда мы получим некорректный вывод.
Выбор папки и перечисление файлов в ней
Создайте обработчик событий нажатия Click для кнопки browseButton , дважды щелкнув этот элемент управления в форме. Откроется редактор кода.
Добавьте следующий код в обработчик событий Click .
FolderBrowserDialog1.ShowDialog Вызов открывает диалоговое окно FolderBrowserDialog1.ShowDialog . После нажатия пользователем кнопки ОК свойство отправляется в качестве аргумента ListFiles в метод, который добавляется на следующем шаге.
Добавьте приведенный ниже метод ListFiles .
Этот код сперва очищает элемент ListBox.
Затем метод GetFiles возвращает коллекцию строк — по одной для каждого файла в каталоге. Метод GetFiles принимает аргумент шаблона поиска, чтобы извлечь файлы, соответствующие определенному шаблону. В этом примере возвращаются только файлы с расширением TXT.
Строки, возвращаемые GetFiles методом, затем добавляются в GetFiles .
Элемент ListBox содержит список TXT-файлов в выбранной папке.
Остановите работу приложения.
The StreamReader Class
The StreamReader class also inherits from the abstract base class TextReader that represents a reader for reading series of characters. The following table describes some of the commonly used methods of the StreamReader class −
Public Overrides Sub Close
It closes the StreamReader object and the underlying stream and releases any system resources associated with the reader.
Public Overrides Function Peek As Integer
Returns the next available character but does not consume it.
Public Overrides Function Read As Integer
Reads the next character from the input stream and advances the character position by one character.
Выборочное включение элементов управления
Добавьте приведенный ниже метод SetEnabled .
Метод SetEnabled включает и отключает элементы управления в зависимости от того, выбран ли элемент в элементе ListBox .
Создайте обработчик событий SelectedIndexChanged для элемента filesListBox , дважды щелкнув элемент управления ListBox в форме.
Добавьте вызов метода SetEnabled в новый обработчик событий filesListBox_SelectedIndexChanged .
Добавьте вызов метода SetEnabled в конце обработчика событий browseButton_Click .
Добавьте вызов метода SetEnabled в конце обработчика событий Form1_Load .
Запустите приложение. Флажок сохранить результаты и кнопка проверить отключены, если элемент не выбран в .
Ниже приведен полный пример.
Включение возможности удаления и изменения записей
Добавьте следующий код в обработчик события Display для кнопки Click после элемента DisplayEntry.Text = ReadString .
Создайте обработчик события Click для кнопки DeleteEntry и добавьте в него следующий код.
Когда пользователь отображает запись, кнопка EditEntry становится доступной. Добавьте следующий код в обработчик событий Click для кнопки Display после элемента DisplayEntry.Text = ReadString .
Создайте обработчик события Click для кнопки EditEntry и добавьте в него следующий код.
Создайте обработчик события Click для кнопки SubmitEdit и добавьте в него следующий код.
Непосредственно для работы с текстовыми файлами в пространстве System.IO предназначены специальные классы StreamReader и StreamWriter .
Добавление возможности записи
В меню Вид выберите пункт Код, чтобы открыть редактор кода.
Поскольку приложение ссылается на пространство имен System.IO, следует добавить следующие операторы в самом начале кода перед объявлением класса для формы, которое начинается с Public Class Form1 .
Перед записью в файл необходимо создать экземпляр класса StreamWriter.
В меню Вид выберите пункт Конструктор для возврата в окно Конструктор Windows Forms. Дважды щелкните кнопку Submit , чтобы создать для нее обработчик событий Click, а затем добавьте в него следующий код.
Интегрированная среда разработки (IDE) Visual Studio откроет редактор кода, а курсор будет помещен внутрь обработчика события, в который и следует добавить код.
Для записи в файл используйте метод Write класса StreamWriter. Добавьте следующий код сразу после Dim fw As StreamWriter . Не стоит беспокоиться о том, что возникнет исключение, если файл не существует, так как в этом случае он будет создан автоматически.
Поскольку речь идет о дневнике, пользователь захочет добавить к каждой записи дату. Вставьте следующий код после fw = New StreamWriter("C:\MyDiary.txt", True) , чтобы присвоить переменной Today значение текущей даты.
Наконец, добавьте код для очистки TextBox. Добавьте следующий код в обработчик события Clear для кнопки Click.
Полный пример с использованием System.IO
В этом пошаговом руководстве демонстрируются открытие и чтение файла с помощью класса StreamReader, проверка доступа к файлу, поиск строки в файле, считанном с помощью экземпляра класса StreamReader, и запись в файл с помощью класса StreamWriter.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Создание приложения
Запустите Visual Studio и начните проект с создания формы, которую пользователь сможет использовать для записи в намеченный файл.
Запись в файл
Чтобы добавить возможность записи в файл с помощью приложения, воспользуйтесь классом StreamWriter. Класс StreamWriter предназначен для вывода символов в определенной кодировке, тогда как класс Stream предназначен для ввода и вывода двоичных данных. Класс StreamWriter следует использовать для записи строк данных в стандартный текстовый файл. Дополнительные сведения о классе StreamWriter см. в статье StreamWriter.
Добавление средств отображения в дневник
В этом разделе вы добавите средство для отображения последней записи в элементе управления DisplayEntry TextBox. Вы также можете добавить элемент ComboBox, который отображает разные записи и позволяет пользователю выбрать запись для отображения в DisplayEntry TextBox. Экземпляр класса StreamReader считывает информацию из MyDiary.txt . Как и класс StreamWriter, StreamReader предназначен для использования с текстовыми файлами.
Для реализации следующей части пошагового руководства необходимо добавить в форму элементы управления из следующей таблицы и присвоить соответствующие значения их свойствам.
Visible
Size
Text
Выбор записи
Запись в файл и StreamWriter
Для записи в текстовый файл применяется класс StreamWriter . Его основные методы:
Close : закрывает записываемый файл и освобождает все ресурсы
Flush : записывает в файл оставшиеся в буфере данные и очищает буфер.
Write : записывает в файл данные простейших типов, как Integer, Double и т.д.
WriteLine : записывает в файл строку
Посмотрим на использование класса StreamWriter на примере:
Вначале весь текст из файла считывается в переменную text, а затем содержание этой переменной с помощью объекта StreamWriter записывается в другой файл.
Класс StreamWriter имеет несколько конструкторов. Здесь мы использовали два из них: New StreamWriter(writePath, False) . В качестве первого параметра передается путь к записываемому файлу. Второй параметр представляет булевую переменную, которая определяет, будет файл дозаписываться или перезаписываться. Если этот параметр равен True , то новые данные добавляются в конце к уже имеющимся данным. Если False , то предыдущее содержимое стирается, и файл перезаписывается. И если в первом случае файл перезаписывается, то во втором делается дозапись в конец файла.
Ну, учимся работать с текстовыми файлами. Это нам нужно, чтобы прочитать существующий файл, изменить его, или создать свой. Крому того, в текстовом файле удобно хранить служебные данные собственной программы, например установки пользователя, результаты обработки данных и т.п.
Текстовой файл, собственно по названию, содержит в себе текстовые символы, ну и символы типа возврат каретки или перевод строки. Традиционно они имеют расширение .txt для текста, .dat для данных, .bat для исполняемых (командных) файлов, ну Windows еще использует .ini, .log, .inf. Читать и записывать их надо последовательно, символ за символом, начиная с первого.
Итак, чтобы что-нибудь сделать с файлом, прежде всего, его надо открыть.
При открытии файла для последовательного доступа нельзя считать какой-то один, к примеру, знак из середины файла, для этого есть другие способы доступа, но об этом не сегодня.
Для открытия файла используется оператор Open. Синтаксис его такой:
Примечание: для открытия файлов прямого доступа, или двоичных файлов оператор Open содержит еще кое-какие аргументы, но сейчас мы их не используем и опускаем.
СЧИТЫВАНИЕ из текстового файла.
Создадим новый .exe проект в какой-нибудь папке и в ту же папку положим небольшой текстовой файл (у меня например "Справка.txt"). На форме разместим кнопку Command1 и текстовое поле Text1. В свойствах Text1 свойство Multiline поставим в True (чтобы текст переносился по строкам), а свойство ScrollBars в 2 - Вертикаль (чтобы можно было прокручивать текст, если он не уместился) смотри рис.15.
Рисунок 15.
Откроем окно кода и в (Genarel) объявим переменные F для хранения номера свободного файла, MyText и AllMyText - для хранения считываемого текста:
Dim F As Long
Dim MyText As String
Dim AllMyText As String
Создадим прцедуру Command1_Click() (щелкнув мышью по Command1 в выпадающем списке в окне кодов в верхнем левом поле, там где (General)). В теле образовавщейся процедуры. Можно также щелкнуть два раза по кнопке Command1 в режиме Объект и перейти в режим Код - там появится нужная нам процедура.
Private Sub Command1_Click()
Напишем для определения номера свободного файла
F = FreeFile
и откроем файл для чтения
Обратите внимание, что для указания пути файла мы опять используем функцию App.Path. Если бы мы написали просто "c:\VB\example\Справка.txt", то при переносе нашей паки с программой на другой диск или компьютер этот путь оказался бы ложным. А функция App.Path всегда возвращает путь, где лежит наша программа. Только перед именем файла не забывайте ставить обратный слеж (\), иначе запись работать не будет.
Для считывания строки текста существует оператор Line Input. Попробуем считать с его помощью содержимое файла в переменную MyText :
Передадим значение MyText переменной в Text1, чтобы увидеть, что мы там считали:
Text1.Text = MyText
затем закроем файл
и запустим нашу программу. Когда мы нажмем кнопку Command1, то в Text1 появиться содержимое файла "Справка.txt". Проблема только в том, что, если,( как и случилось в нашем файле "Справка.txt"), при создании текста применялось нажатие кнопки ENTER (перевод строки), то оператор Line Input считает текст до этого знака и все, потому, что строка кончилась. Чтобы этого избежать, мы применим цикл и будем считывать строки до конца файла. Для этого придется разобраться с новым для нас циклом по условию Do. Loop.
Цикл по условию Do. Loop
Это очень простая вещь. Цикл работает до тех пор, пока не выполнится какое-нибудь условие. Например мы будем увеличивать переменную X до тех пор, пока оне не станет равной, например, 100. Для этого применяется аргумент Until:
Do Until x>=100
x=x+1
Loop
при этом когда цикл закончится x будет равно 100. Можно записать его по другому, при этом смысл работы цикла не изменится:
Do
x = x + 1
Loop Until x >=100
Можно цикл записать наоборот, и он будеn выполняться до тех пор, пока соблюдается какое-то условие. Для этого применяется аргумент While (делать, пока. ) :
Do While x < 100
x = x + 1
Loop
Do
x = x + 1
Loop While x < 100
Во всех четырех случаях результат будет один. Цикл остановится, когда X=100. Только надо обращаться с ними аккуратно. Если ты поставишь условие, которое изначально ложно, цикл не выполнится ни разу, и наоборот если условие будет истинно всегда, возникнет бесконечный цикл и программа по-сути зависнет. Вот этот цикл не будет выполняться:
Do While x =100
x = x + 1
Loop
а этот будет бесконечным
Do Until x < 0
x = x + 1
Loop
Ну а теперь используем наш цикл для считывания строк из файла до тех пор, пока не настанет конец файла. Чтобы узнать, достигнут ли конец файла, можно использовать функцию EOF(номер файла), которая примет значение True, как только конец файла будет достигнут. Теперь переделаем нашу процедуру следующим образом:
По строкам здесь:
1 - объявление нашей процедуры
2 - очистка Text1
3 - присваиваем переменной F свободный номер файла
4 - открываем файл "Справка.txt" для последовательного чтения
5 - цикл по условию: до тех пор пока не конец файла
6 - DO в цикле считываем каждую строчку
7 - Присоединяем очередную строку к Text1 и ставим перевод строки (vbCrLf) чтоб красиво было
8 - LOOP завершаем цикл
9 - закрываем наш файл
10- конец процедуры
Ну вот и готово.
Здесь все почти в точности, как и в предыдущем примере, только суть несколько другая.
ЗАПИСЬ в текстовой файл.
Как и для считывания, прежде, чем записывать в текстовой файл, нужно получить к нему доступ. Для этого используем оператор Open с ключевым словом Output.
Добавим на форму еще кнопку Command4. Создадим для нее процедуру и напишем там:
То есть, мы записываем содержимое нашего текстбокса (если там что-то есть. Считайте в текстбокс Text1 наш файл Справка.txt нажатием одной из кнопок Command1-Command3) в файл "Запись.txt". Затем закрываем файл и конец процедуре:
Private Sub Command6_Click()
Dim Chislo As Long ' числовая
Dim Stroka As String ' строковая
Dim Logika As Boolean ' логическая
Dim DDate As Date ' дата (не путайте с Data)
Добавление данных в текстовой файл.
Чтобы добавить данные в текстовой файл, не стирая имеющихся там, надо просто открыть файл с ключевым словом Append. Быстренько разберем это на примере. Для этого положим на форму последнюю кнопку Command7 и в ней напишем код:
Ну вот и все, что я хотел сообщить тебе сегодня про текстовые файлы. Ну нам с файлами еще работать и работать. . Исходник можешь скачать вверху страницы.
Example
The following example demonstrates reading a text file named Jamaica.txt. The file reads −
Guess what it displays when you compile and run the program!
Создание проекта
В меню Файл выберите пункт Создать проект.
В области Новый проект щелкните Приложения Windows.
В поле имя введите и нажмите кнопку ОК.
Visual Studio добавит проект в обозреватель решений, после чего откроется конструктор Windows Forms.
Добавьте в форму элементы управления из следующей таблицы и установите для их свойств соответствующие значения.
Text
Введите произвольный текст.
Использование текущего каталога
Создайте обработчик событий для события Form1_Load , дважды щелкнув форму.
Добавьте в обработчик событий приведенный ниже код.
Этот код задает текущий каталог в качестве каталога по умолчанию для обозревателя папок.
Запустите приложение. При первом нажатии кнопки Обзор открывается диалоговое окно Выбор папки с текущим каталогом.
Остановите работу приложения.
Создание проекта
В меню Файл выберите пункт Создать проект.
Откроется диалоговое окно Создание проекта .
В области Установленные шаблоны разверните узел Visual Basic и выберите элемент Windows. В середине области Шаблоны щелкните Приложение Windows Forms.
В поле имя введите , чтобы задать имя проекта, и нажмите кнопку ОК.
Visual Studio добавит проект в обозреватель решений, после чего откроется конструктор Windows Forms.
Добавьте в форму элементы управления из приведенной ниже таблицы и установите для их свойств соответствующие значения.
Получение атрибутов файла и содержимого текстового файла
Создайте обработчик событий нажатия Click для кнопки examineButton , дважды щелкнув этот элемент управления в форме.
Добавьте следующий код в обработчик событий Click .
Этот код проверяет, выбран ли элемент в элементе ListBox . Затем он получает запись пути к файлу из элемента ListBox . Метод FileExists позволяет проверить, существует ли файл.
Путь к файлу передается как аргумент методу GetTextForOutput , который добавляется в следующем шаге. Этот метод возвращает строку, содержащую информацию о файле. Информация о файле отображается в элементе MessageBox.
Добавьте приведенный ниже метод GetTextForOutput .
Метод GetFileInfo используется в коде для получения параметров файла. Параметры файла добавляются в StringBuilder.
Метод OpenTextFileReader считывает содержимое файла в StreamReader. Первая строка содержимого файла извлекается из StreamReader и добавляется в StringBuilder .
Выберите файл в ListBox , а затем нажмите кнопку ListBox . В окне MessageBox будет выведена информация о файле.
Остановите работу приложения.
Предоставление пользователям возможности удалять и изменять записи
В заключение можно включить в приложение дополнительные функции, позволяющие пользователям удалять и изменять записи с помощью кнопок DeleteEntry и EditEntry . Обе кнопки неактивны, пока не выбрана ни одна запись.
Добавьте в форму элементы управления из следующей таблицы и установите для их свойств соответствующие значения.
Text
Удаление записи
Text
Изменить запись
Text
Отправка изменений
Выбор и просмотр отдельных записей
Создайте обработчик события Click для кнопки Display и добавьте в него следующий код.
Чтобы протестировать код, нажмите клавишу F5 для компиляции, а затем введите запись. Щелкните получить записи, выберите запись в и нажмите кнопку Показать. Содержимое выбранной записи появится в элементе DisplayEntry TextBox.
The StreamWriter Class
The StreamWriter class inherits from the abstract class TextWriter that represents a writer, which can write a series of character.
The following table shows some of the most commonly used methods of this class −
Public Overrides Sub Close
Closes the current StreamWriter object and the underlying stream.
Public Overrides Sub Flush
Clears all buffers for the current writer and causes any buffered data to be written to the underlying stream.
Public Overridable Sub Write (value As Boolean)
Writes the text representation of a Boolean value to the text string or stream. (Inherited from TextWriter.)
Public Overrides Sub Write (value As Char)
Writes a character to the stream.
Public Overridable Sub Write (value As Decimal)
Writes the text representation of a decimal value to the text string or stream.
Public Overridable Sub Write (value As Double)
Public Overridable Sub Write (value As Integer)
Writes the text representation of a 4-byte signed integer to the text string or stream.
Public Overrides Sub Write (value As String)
Writes a string to the stream.
Public Overridable Sub WriteLine
Writes a line terminator to the text string or stream.
The above list is not exhaustive. For complete list of methods please visit Microsoft's documentation
Заполнение элемента управления ComboBox
В элементе управления PickEntries ComboBox отображается дата создания каждой из записей, чтобы пользователь мог выбрать запись за определенную дату. Создайте обработчик события Click для кнопки GetEntries и добавьте в него следующий код.
Чтобы протестировать код, нажмите клавишу F5 для компиляции, а затем нажмите кнопку Показать записи. Щелкните стрелку раскрывающегося списка в ComboBox, чтобы отобразить даты записей.
Добавление записи в журнал
В конец обработчика событий examineButton_Click добавьте приведенный ниже код.
Код задает путь к файлу журнала, чтобы файл журнала помещался в тот же каталог, где находится выбранный файл. Запись журнала должна содержать текущие дату и время, а далее информацию о файле.
Метод WriteAllText, которому передается аргумент append со значением True , используется для создания записи в журнале.
Запустите приложение. Перейдите к текстовому файлу, выберите его в ListBox , установите флажок ListBox и нажмите кнопку проверить. Проверьте, добавлена ли запись в файл log.txt .
Остановите работу приложения.
Читайте также: