В целом, порядок открытия, доступа и закрытия файла зависит от конкретного приложения. То, что хорошо в одном случае, может оказаться неприемлемым в дру гом. Поэтому данный процесс приходится приспосабливать к конкретным потребно стям разрабатываемой программы. Запись в файл
Для записи байта в файл служит метод WriteByte. Ниже приведена его про стейшая форма. void WriteByte(byte value)
Этот метод выполняет запись в файл байта, обозначаемого параметром value. Если базовый поток не открывается для вывода, то генерируется исключение NotSupportedException. А если поток закрыт, то генерируется исключение ObjectDisposedException.
Для записи в файл целого массива байтов может быть вызван метод Write. Ниже приведена его общая форма. void Write(byte[] array, int offset, int count)
В методе Write предпринимается попытка записать в файл количество count байтов из массива array, начиная с элемента array[offset]. Он возвращает количе ство байтов, успешно записанных в файл. Если во время записи возникает ошибка, то генерируется исключение IOException. А если базовый поток не открывается для вы вода, то генерируется исключение NotSupportedException. Кроме того, может быть сгенерирован ряд других исключений.
Вам, вероятно, известно, что при выводе в файл выводимые данные зачастую запи сываются на конкретном физическом устройстве не сразу. Вместо этого они буфери зуются на уровне операционной системы до тех пор, пока не накопится достаточный объем данных, чтобы записать их сразу одним блоком. Благодаря этому повышается эффективность системы. Так, на диске файлы организованы по секторам величиной от 128 байтов и более. Поэтому выводимые данные обычно буферизуются до тех пор, пока не появится возможность записать на диск сразу весь сектор.
Но если данные требуется записать на физическое устройство без предварительно го накопления в буфере, то для этой цели можно вызвать метод Flush. void Flush
При неудачном исходе данной операции генерируется исключение IOException. Если же поток закрыт, то генерируется исключение ObjectDisposedException.
По завершении вывода в файл следует закрыть его с помощью метода Close. Этим гарантируется, что любые выведенные данные, оставшиеся в дисковом буфе ре, будут записаны на диск. В этом случае отпадает необходимость вызывать метод Flush перед закрытием файла.
Ниже приведен простой пример программы, в котором демонстрируется порядок записи данных в файл. // Записать данные в файл. using System; using System.IO; class WriteToFile { static void Main(string[] args) { FileStream fout = null; try { // Открыть выходной файл. fout = new FileStream("test.txt", FileMode.CreateNew); // Записать весь английский алфавит в файл. for(char с = 'А'; с <= 'Z'; C++) fout.WriteByte((byte) с); } catch(IOException exc) { Console.WriteLine("Ошибка ввода-вывода:\n" + exc.Message); } finally { if (fout != null) fout.Close; } } }
В данной программе сначала создается выходной файл под названием test.txt с помощью перечисляемого значения FileMode.CreateNew. Это означает, что файл с таким же именем не должен уже существовать. (В противном случае генерируется исключение IOException.) После открытия выходного файла в него записываются прописные буквы английского алфавита. По завершении данной программы содер жимое файла test.txt оказывается следующим. ABCDEFGHIJKLMNOPQRSTUVWXYZ Использование класса FileStream для копирования файла