Произвольный доступ к содержимому файла

В рассмотренных ранее программах использовался последовательный доступ к содержимому файла, байт за байтом. Однако в С# возможен произвольный доступ к содержимому файлов. Для этого используется метод Seek (), определенный в классе FileStream. Этот метод позволяет задавать индикатор позиции текущего элемента данных в файле (или файловый указатель).

Синтаксис метода Seek ():

long Seek (long newPos, SeekOrigin origin)

Параметр newPos указывает на новую позицию (в байтах) для файлового указателя, начиная от местоположения, указанного параметром origin. Последний параметр может иметь одно из следующих значений:

· Begin – отсчет от начала файла

· Current – отсчет от текущего местоположения

· End – отсчет от конца файла.

После вызова метода Seek () следующие операции чтения либо записи производятся с новой позиции файлового указателя. Если во время позиционирования указателя произойдет ошибка, генерируется исключение IOException. Если поток не поддерживает операцию позиционирования, генерируется исключение NotSupportedException.

Пример 5.

В этом примере в файл помещаются прописные буквы, которые затем считываются в произвольном порядке.

using System;

using System.IO;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

FileStream f;

char c;

try

{

f = new FileStream("test.txt", FileMode.Create);

}

catch (FileNotFoundException exc)

{

Console.WriteLine(exc.Message);

return;

}

// запись букв в алфавитном порядке

for(int i=0; i<26; i++)

try

{

f.WriteByte((byte)('A' + i));

}

catch (IOException exc)

{

Console.WriteLine(exc.Message);

return;

}

try

{

// считывание букв

f.Seek(0, SeekOrigin.Begin);

c = (char)f.ReadByte();

Console.WriteLine("Первое значение" + c);

f.Seek(1, SeekOrigin.Begin);

c = (char)f.ReadByte();

Console.WriteLine("Второе значение" + c);

f.Seek(4, SeekOrigin.Begin);

c = (char)f.ReadByte();

Console.WriteLine("Пятое значение" + c);

Console.WriteLine();

// чтение четных букв

Console.WriteLine("Четные буквы:");

for (int i = 0; i < 26; i += 2)

{

f.Seek(i, SeekOrigin.Begin);

c = (char)f.ReadByte();

Console.WriteLine(c + " ");

}

}

catch (IOException exc)

{

Console.WriteLine(exc.Message);

}

f.Close();

}

}

}

Практическая часть

Порядок выполнения работы

1. Изучить теоретические сведения.

2. Выполнить индивидуальное задание.

Пункты задания выполняются в заданном порядке. После анализа результата выполнения каждого пункта задания, необходимо описать технологию его выполнения в отчете.

3. Оформить и сдать отчет по лабораторной работе.


Перечень индивидуальных заданий


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: