using System;
using System.IO;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int i;
FileStream fin;
FileStream fout;
// открытие исходного файла
try
{
fin = new FileStream("first.txt", FileMode.Open);
}
catch (FileNotFoundException exc)
{
Console.WriteLine(exc.Message + "\n Исходный файл не найден");
return;
}
// открытие файла-копии
try
{
fout = new FileStream("second.txt", FileMode.Create);
}
catch (FileNotFoundException exc)
{
Console.WriteLine(exc.Message + "\n Ошибка создания файла-копии");
return;
}
catch(IndexOutOfRangeException exc)
{
Console.WriteLine(exc.Message+"\nUsage file.txt");
return;
}
//Копирование файла
try
{
do
{
i=fin.ReadByte();
if(i!=-1) fout.WriteByte((byte) i);
}
while(i!=-1);
}
catch(IOException exc)
{
Console.WriteLine(exc.Message + "Файловая ошибка");
return;
}
fin.Close();
fout.Close();
}
}
}
Ввод/вывод в символьные файлы
Для автоматического преобразования байтовых потоков в символьные и наоборот используются классы StreamReader и StreamWriter. При выполнении файловых операций, основанных на использовании символов, класс FileStream включается в состав класса StreamReader или StreamWriter.
Использование класса StreamWriter
Для создания символьного потока вывода объект File Stream включается в состав класса StreamWriter следующим образом:
StreamWriter(Stream stream)
Параметр stream указывает имя открытого потока. Если указанный поток будет пуст, конструктор вызывает исключение ArgumentException, а если stream равен нулю, вызывается исключение ArgumentNullException. Сразу же после создания класс StreamWriter автоматически выполняет преобразование символов в байты.
В некоторых случаях можно открыть файл напрямую, используя класс StreamWriter. При этом используется один из указанных ниже конструкторов:
StreamWriter (string filename)
StreamWriter (string filename, bool appendFlag)
filename – имя открываемого файла.
При использовании конструктора второго вида данные будут добавляться в конец существующего файла, если флагу appendTrue присвоено значение true. Если же упомянутому флагу присвоено значение false, данные будут вмещать содержимое указанного файла. При отсутствии файла в обоих случаях происходит его создание. Также в обоих случаях генерируется исключение IOException в случае наличия ошибки.