- •Лабораторная работа № 9
- •Содержание
- •1. Теоретическая часть
- •1.1 Потоки
- •1.2 Классы для ввода-вывода
- •1.3 Объект FileStream
- •1.4 Позиция внутри файла
- •1.5 Асинхронный доступ к файлам
- •2. Практическая часть
- •2.1 Чтение данных из файла с произвольным доступом
- •2.2 Запись данных в файл с произвольным доступом
- •2.3 Работа с потоками. Выходной поток
- •2.4 Работа с потоками. Входной поток
- •2.5 Асинхронное считывание файлов с использованием событий
- •3. Задания
2. Практическая часть
2.1 Чтение данных из файла с произвольным доступом
1. Откройте Visual Studio.NET.
2. Откройте новый проект выбрав File | New | Project. Выберите пункт С# Console Application и назовите его ReadFile.
3. Добавьте следующее объявления пространств имен в самое начало файла Program.cs. Пространство именSystem.IOнеобходимо для класса FileStream.
using System.IO;
4. Добавьте следующий код в метод Main():
static void Main(string[] args)
{
byte[] byData = new byte[100];
char[] charData = new Char[100];
try
{
//открывает свой файл кода для чтения, ../ исспользуется для доступа
FileStream aFile = new FileStream("../../Program.cs",FileMode.Open);
//Переход на 55 позицию от начала
aFile.Seek(55,SeekOrigin.Begin);
//Читает в буфер byData 100 символов
aFile.Read(byData,0,100);
}
catch(IOException e)
{
//Обработка исключительных ситуаций
Console.WriteLine("An IO exception has been thrown!");
Console.WriteLine(e.ToString());
Console.ReadLine();
return;
}
//Преобразование символов в другую кодировку
Decoder d = Encoding.UTF8.GetDecoder();
d.GetChars(byData, 0, byData.Length, charData, 0);
//Вывод результата на консоль
Console.WriteLine(charData);
Console.ReadLine();
return;
}
Запустив приложение, вы получите приблизительно такой выходной поток, как показано на рис. 9.1.
Рис. 9.1.Результат работы программы
2.2 Запись данных в файл с произвольным доступом
Измените в приведенном выше примере код функции Main() на приведенный ниже.
static void Main(string[] args)
{
byte[] byData = new byte[100];
char[] charData = new Char[100];
charData = "Hello World".ToCharArray();
try
{
FileStream aFile = new FileStream("Temp.txt", FileMode.OpenOrCreate);
Encoder e = Encoding.UTF8.GetEncoder();
//Преобраование символьного масива в массив байтов
e.GetBytes(charData, 0, charData.Length, byData, 0, true);
// Перемещение указателя файла в самое начало файла
aFile.Seek(0, SeekOrigin.Begin);
// Непосредственно запись в файл
aFile.Write(byData, 0, byData.Length);
}
catch (IOException ex)
{
Console.WriteLine("An 10 exception has been thrown!");
Console.WriteLine(ex.ToString());
Console.ReadLine();
return;
}
}
Далее откомпилируйте приложение и запустите. Оно будет выполнятся некоторое время, после чего завершится. Перейдите в директорию приложения, файл будет сохранен именно в ней, так как используется относительный путь. Это в папке с проектом, \ ..\bin\Debug. В ней вы обнаружите файлtemp.txt, размером ровно 100 байт. В нем будет содержаться текст“Hello world”.
Программа работает аналогично программе чтения, только здесь файл открывается для записи, а не для чтения. Аналогично используется объект Encoderи поиск позиции внутри файла.