Чтобы воспользоваться этой программой, укажите имена исходного и выходного файлов. Например, для копирования файла FIR'ST.DAT в файл SECOND.DAT введите в командной строке следующее:

CopyFile FIRST.DAT SECOND.DAT

*/

using System; using System.10;

class CopyFile {

static void Main(string[] args) { int i;

FileStream fin = null;

FileStream fout = null;

if(args.Length != 2) {

Console.WriteLine("Применение: CopyFile Откуда Куда"); return;

}

try {    1

// Открыть файлы.

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

// Скопировать файл, do {

i = fin.ReadByte();

if(i != -1) fout.WriteByte((byte)i);

} while (i != -1);

} catch(IOException exc) {

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

} finally {

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

>

Символьный ввод-вывод в файл

Несмотря на то что файлы часто обрабатываются побайтово, для этой цели можно воспользоваться также символьными потоками. Преимущество символьных потоков заключается в том, что они оперируют символами непосредственно в уникоде. Так, если требуется сохранить текст в уникоде, то для этого лучше всего подойдут именно символьные потоки. В целом, для выполнения операций символьного ввода-вывода в файлы объект классаFileStreamзаключается в оболочку классаStreamReaderилиStreamWriter.В этих классах выполняется автоматическое преобразование байтового потока в символьный и наоборот.

Не следует, однако, забывать, что на уровне операционной системы файл представляет собой набор байтов. И применение классаStreamReaderилиStreamWriterникак не может этого изменить.

КлассStreamWriterявляется производным от классаТех tW rite г,а классStreamReader— производным от классаTextReader.Следовательно, в классахStreamReaderиStreamWriterдоступны методы и свойства, определенные в их базовых классах.

Применение класса StreamWriter

Длясоздания символьного потока вывода достаточно заключить объект классаStream,напримерFileStream,в оболочку классаStreamWriter.В классеStreamWriterопределено несколько конструкторов. Ниже приведен едва ли не самый распространенный среди них:

StreamWriter(Streamпоток)

гдепотокобозначает имя открытого потока. Этот конструктор генерирует исключениеArgumentException,еслипотокне открыт для вывода, а также исключениеArgumentNullException,еслипотококазывается пустым. После создания объекта классStreamWriterвыполняет автоматическое преобразование символов в байты.

Перейти на страницу:

Похожие книги