Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 4.doc
Скачиваний:
32
Добавлен:
15.04.2015
Размер:
215.04 Кб
Скачать

Загрузка ListBox из файлов

Для работы с текстовыми файлами удобно использовать потоки и класс потоков, наследника класса Stream - Класс FileStream.

Класс FileStream используется для чтения и записи файлов. Его можно использовать для чтения и записи байтов, символов, строк и других типов данных. Класс FileStream поддерживает синхронное и асинхронное открытие файлов, синхронные операции чтения и записи (методы Read и Write), а также асинхронные операции чтения и записи (методы BeginRead и BeginWrite). Асинхронные операции завершаются вызовом методов EndRead и EndWrite соответственно. Режим по умолчанию - синхронный. Для проверки режима используемтсясвойство класса IsAsync. Для асинхронных операций необходим объект WaitHandle. Метод Seek используется для произвольного доступа к файлам. Свойство Position позволяет нам узнать или установить текущую позицию в потоке. Методы Lock и Unlock служат для предотвращения доступа ко всему файлу или к его части, а также для отмены ранее установленного запрета доступа. Свойство Length возвращает длину потока в байтах, а метод SetLength служит для задания длины потока. Методы ReadByte и WriteByte используются для чтения и записи одного байта. Для других примитивных типов необходимы классы BinaryReader и BinaryWriter соответственно.

Удобно использовать для работы с текстовыми файлами в дополнение к классу FileStream классы TextReader, TextWriter StreamReader, StreamWriter, StringReader и StringWriter.

Класс TextReader используется для чтения последовательности символов из ассоциированного потока. Этот класс служит основой для двух других классов: StreamReader и StringReader.

Класс TextReader содержит следующие методы:

  • Peek() - возвращает следующий символ из потока, но не перемещает указатель текущей позиции;

  • Read() или Read(Char(), Integer, Integer) - метод применяется для чтения указанного числа символов из потока;

  • ReadBlock(Char(), Integer, Integer) - метод считывает указанное число символов в буфер;

  • ReadLine() - считывает строку символов из потока;

  • ReadToEnd() - считывает все символы с текущей позиции до конца потока как одну строку.

Класс TextWriter служит для записи последовательности символов в поток.

Класс StreamReader применяется для чтения последовательности символов из файла или другого потока. Его можно использовать для чтения текстового файла построчно и как одну строку.

Класс StringReader позволяет выполнить чтение символов из строк. StreamReader и StringReader для чтения строки из текстового файла и чтения символов из этой строки как из потока:

Класс StreamWriter применяется для вывода последовательности символов в той или иной кодировке. По умолчанию используется экземпляр класса UTF8Encoding для записи символов в кодировке Unicode UTF-8. Существует несколько перегруженных конструкторов, позволяющих указать поток, кодировку по умолчанию, задать кодировку, размер буфера и тип операции: требуется перезаписать существующий файл или информация должна быть к нему добавлена. Свойство Flush служит для указания, следует ли записывать содержимое буфера в поток после каждого вызова методов Write и WriteLine.

Класс StringWriter используется для записи строки, которая хранится в классе StringBuilder, реализованном в пространстве имен System.Text.

Покажем возможные способы использования перечисленных классов для ввода и вывода информации в ListBox.

Проверим в заголовке наличие кода using System.IO и пишем в обработчике события нажатия кнопки 1 следующий код:

private void toolStripButton1_Click(object sender, EventArgs e)

{

string sStringText;

string sFileName="a.txt";

TextReader textreader = new StreamReader(sFileName);

listBox1.Items.Clear();

while(textreader.Peek() > -1)

{

sStringText=textreader.ReadLine();

listBox1.Items.Add(sStringText);

}

textreader.Close();

}

Для записи в файл можно воспользоваться следующим кодом:

private void toolStripButton2_Click(object sender, EventArgs e)

{

//Создаем поток для записи в файл и загружаем в него файл

//при отсутствии файла он будет создан

FileStream filestream =

new FileStream("a.txt",FileMode.OpenOrCreate,FileAccess.Write);

//Очищаем поток

filestream.SetLength(0);

//StreamWriter создаем для потока filestream

StreamWriter streamwriter = new StreamWriter(filestream);

//Записываем текст, из ListBoxBox1 в файл

for(int i=0; i < listBox1.Items.Count; i++)

{

streamwriter.WriteLine(listBox1.Items[i].ToString());

}

//Освобождаем ресурсы

streamwriter.Flush();

streamwriter.Close();

filestream.Close();

}