Добавить в цитаты Настройки чтения

Страница 205 из 502

Как и прежде, путь обозначает имя открываемого файла, включая и полный путь к нему, а режим — порядок открытия файла. В то же время доступ обозначает конкретный способ доступа к файлу. В последнем случае указывается одно из значений, определяемых в перечислении FileAccess и приведенных ниже.

<b>FileAccess.Read</b>

<b>FileAccess.Write</b>

<b>FileAccess.ReadWrite</b>

Например, в следующем примере кода файл test.dat открывается только для чтения.

<b>FileStream fin = new FileStream(&quot;test.dat&quot;, FileMode.Open, FileAccess.Read);</b>

По завершении работы с файлом его следует закрыть, вызвав метод Close(). Ниже приведена общая форма обращения к этому методу.

<b>void Close()</b>

При закрытии файла высвобождаются системные ресурсы, распределенные для этого файла, что дает возможность использовать их для другого файла. Любопытно, что метод Close() вызывает, в свою очередь, метод Dispose(), который, собственно, и высвобождает системные ресурсы.

---------------------------------------

ПРИМЕЧАНИЕ

Оператор using, рассматриваемый в главе 20, предоставляет еще один способ закрытия файла, который больше не нужен. Такой способ оказывается удобным во многих случаях обращения с файлами, поскольку гарантирует закрытие ненужного больше файла простыми средствами. Но исключительно в целях демонстрации основ обращения с файлами, в том числе и того момента, когда файл может быть закрыт, во всех примерах, представленных в этой главе, используются явные вызовы метода Close().

----------------------------------------

В классе FileStream определены два метода для чтения байтов из файла: ReadByte() и Read(). Так, для чтения одного байта из файла используется метод ReadByte(), общая форма которого приведена ниже.

<b>int ReadByte()</b>

Всякий раз, когда этот метод вызывается, из файла считывается один байт, который затем возвращается в виде целого значения. К числу вероятных исключений, которые генерируются при этом, относятся NotSupportedException (поток не открыт для ввода) и ObjectDisposedException (поток закрыт).

Для чтения блока байтов из файла служит метод Read(), общая форма которого выглядит так.

<b>int Read(byte[ ] array, int offset, int count)</b>

В методе Read() предпринимается попытка считать количество count байтов в массив array, начиная с элемента array[offset]. Он возвращает количество байтов, успешно считанных из файла. Если же возникает ошибка ввода-вывода, то генерируется исключение IOException. К числу других вероятных исключений, которые генерируются при этом, относится NotSupportedException. Это исключение генерируется в том случае, если чтение из файла не поддерживается в потоке.

В приведенном ниже примере программы метод ReadByte() используется для ввода и отображения содержимого текстового файла, имя которого указывается в качестве аргумента командной строки. Обратите внимание на то, что в этой программе проверяется, указано ли имя файла, прежде чем пытаться открыть его.

<b>/* Отобразить содержимое текстового файла.</b>

<b>Чтобы воспользоваться этой программой, укажите имя того файла, содержимое которого требуется отобразить. Например, для просмотра содержимого файла TEST.CS введите в командной строке следующее:</b>

<b>ShowFile TEST.CS</b>

<b>*/</b>

<b>using System; </b>

<b>using System.IO;</b>

<b>class ShowFile {</b>

<b>  static void Main(string[] args) {</b>

<b>    int i;</b>

<b>    FileStream fin;</b>

<b>    if(args.Length != 1) {</b>

<b>      Console.WriteLine(&quot;Применение: ShowFile Файл&quot;);</b>

<b>      return;</b>

<b>    }</b>

<b>    try {</b>

<b>      fin = new FileStream(args[0], FileMode.Open);</b>

<b>    } catch(IOException exc) {</b>

<b>      Console.WriteLine(&quot;He удается открыть файл&quot;);</b>

<b>      Console.WriteLine(exc.Message);</b>

<b>      return; // Файл не открывается, завершить программу</b>

<b>    }</b>

<b>    // Читать байты до конца файла,</b>

<b>    try {</b>

<b>      do {</b>

<b>        i = fin.ReadByte();</b>

<b>        if(i != -1) Console.Write((char) i);</b>

<b>      } while(i != -1);</b>

<b>    } catch(IOException exc) {</b>

<b>      Console.WriteLine(&quot;Ошибка чтения файла&quot;);</b>

<b>      Console.WriteLine(exc.Message) ;</b>

<b>    } finally {</b>

<b>      fin.Close() ;</b>

<b>    }</b>

<b>  }</b>

<b>}</b>