Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Чтение байтов из потока файлового ввода-вывода





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

int ReadByte()

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

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

int Read(byte[ ] array,int offset,int count)

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

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

Чтобы воспользоваться этой программой, укажите имя того файла,

содержимое которого требуется отобразить. Например, для просмотра

содержимого файла TEST.CS введите в командной строке следующее:

ShowFile TEST.CS

*/

using System;

using System.IO;

class ShowFile

{

static void Main(string[] args)

{

int i;

FileStream fin;

if (args.Length!= 1)

{

Console.WriteLine("Применение: ShowFile Файл");

return;

}

try

{

fin = new FileStream(args[0], FileMode.Open);

}

catch (IOException exc)

{

Console.WriteLine("He удается открыть файл");

Console.WriteLine(exc.Message);

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

}

// Читать байты до конца файла.

try

{

do

{

i = fin.ReadByte();

if (i!= -1) Console.Write((char)i);

}

while (i!= -1);

}

catch (IOException exc)

{

Console.WriteLine("Ошибка чтения файла");

Console.WriteLine(exc.Message);

}

finally

{

fin.Close();

}

}

}

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

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

using System;

using System.IO;

class ShowFile

{

static void Main(string[] args)

{

int i;

FileStream fin = null;

if (args.Length!= 1)

{

Console.WriteLine("Применение: ShowFile File");

return;

}

// Использовать один блок try для открытия файла и чтения из него

try

{

fin = new FileStream(args[0], FileMode.Open);

// Читать байты до конца файла.

do

{

i = fin.ReadByte();

if (i!= -1) Console.Write((char)i);

} while (i!= -1);

}

catch (IOException exc)

{

Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message);

}

finally

{

if (fin!= null) fin.Close();

}

}

}

Обратите внимание на то, что в данном варианте программы переменная fin ссылки на объект класса FileStream инициализируется пустым значением. Если файл удастся открыть в конструкторе класса FileStream, то значение переменной fin окажется непустым, а иначе — оно так и останется пустым. Это очень важно, поскольку метод Close() вызывается внутри блока finally только в том случае, если значение переменной fin оказывается непустым. Подобный механизм препятствует любой попытке вызвать метод Close() для переменной fin, когда она не ссылается на открытый файл. Благодаря своей компактности такой подход часто применяется во многих примерах организации ввода-вывода, приведенных далее в этой книге. Следует, однако, иметь в виду, что он не пригоден в тех случаях, когда ситуацию, возникающую в связи с невозможностью открыть файл, нужно обрабатывать отдельно. Так, если пользователь неправильно введет имя файла, то на экран, возможно, придется вывести приглашение правильно ввести имя файла, прежде чем входить в блок try, где осуществляется проверка правильности доступа к файлу.

Date: 2015-09-02; view: 420; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию