Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 11. Файлы.doc
Скачиваний:
9
Добавлен:
02.05.2019
Размер:
168.96 Кб
Скачать

Пример преобразования чисел, содержащихся в текстовом файле

В данном примере вычисляется сумма чисел в каждой строке.

На содержимое файла накладываются весьма строгие ограничения: числа должны быть разделены ровно одним пробелом, после последнего числа в строке пробела быть не должно, файл не должен заканчиваться символом перевода строки.

using System;

using System.IO;

namespace ConsoleApplication1

{ class Class1

{ static void Main()

{

try

{

StreamReader f=new StreamReader ("numbers.txt");

string s;

const int n= 20;

int []a=new int[n];

string [] buf;

while((s=f.ReadLine()) != null)

{

buf = s.Split(' ');

long sum=0;

for (int i=0; i<buf.Length; ++i)

{

a[i]=Convert.ToInt32(buf[i]);

sum+=a[i];

}

Console.WriteLine("{0} сумма: {1}", s, sum);

Console.ReadKey();

}

f.Close();

}

catch (FileNotFoundException e)

{ Console.WriteLine(e.Message);

Console.WriteLine("Проверьте правильность имени файла!");

Console.ReadKey();

return; }

catch (Exception e)

{ Console.WriteLine("Error:" + e.Message);

Console.ReadKey();

return; } } }}

Результат работы программы: 1 2 4 сумма: 7 3 44 -3 6 сумма: 50 8 1 1 сумма: 10

Двоичные файлы

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

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

Основные методы двоичных потоков приведены в таблицах 11.7 и 11.8

Таблица 11.7 – Основные элементы класса BinaryWriter

Элемент Описание

BaseStream Базовый поток, с которым работает объект BinaryWriter

Close Закрыть поток

Flush Очистить буфер

Seek Установить позицию в текущем потоке

Write Записать значение вы текущий поток

Таблица 11.8 -Наиболее важные элементы класса BinaryReader

Элемент Описание

BaseStream Базовый поток, с которым работает BinaryReader

Close Закрытый поток

PeekChar Возвратить следующий символ без перемещения

внутреннего указателя в потоке

Read Считать поток байтов или символов и сохранить в

массиве,

передаваемом как входной параметр

ReadXXXX Считать из потока данные определенного типа(например, ReadBoolean, ReadByte, ReadInt32)

_________________________________________________________________________________

В приведенном ниже примере формируется двоичный файл. В него записывается последовательность вещественных чисел, а затем для демонстрации произвольного доступа третье число заменяется числом 8888.

Пример формирования двоичного файла

using System;

using System.IO;

namespace ConsoleApplication1

{

class Class1

{

static void Main()

{

try

{

BinaryWriter fout = new BinaryWriter(

new FileStream(@"E:\11.txt", FileMode.Create));

double d = 0;

while (d < 4)

{

fout.Write(d);

d += 0.33;

};

fout.Seek(16, SeekOrigin.Begin); //второй элемент файла

fout.Write(8888d);

fout.Close();

}

catch (Exception e)

{ Console.WriteLine("Error:" + e.Message);return;}}}}

При создании двоичного файла в него передается объект базового потока. При установке указателя текущей позиции в файле учитывается длина каждого значения типа double – 8 байт.

Для просмотра сформированного файла с помощью экземпляра BinaryReader считывается содержимое файла в массив вещественных чисел, а затем выводится этот массив на экран.

При чтении метод ReadDouble при обнаружении конца файла генерирует исключение EndOfStreamException. Поскольку в данном случае это не ошибка, тело обработчика исключений пустое.

Пример чтения двоичного файла

using System;

using System.IO;

namespace ConsoleApplication1

{ class Class1

{ static void Main()

{

try

{

FileStream f=

new FileStream( @"E:\11.txt", FileMode.Open);

BinaryReader fin=new BinaryReader(f);

long n=f.Length/8; //количество чисел в файле

double[] x=new double[n];

long i=0;

try

{

while(true) x[i++]=fin.ReadDouble(); //чтение

}

catch (EndOfStreamException e) {}

foreach (double d in x) Console.Write(" "+d); //вывод

fin.Close(); Console.ReadKey();

f.Close();

}

catch (FileNotFoundException e)

{ Console.WriteLine(e.Message);

Console.WriteLine("Проверьте правильность имени файла!");

return;

}

catch (Exception e)

{Console.WriteLine("Error:" + e.Message); return; }}}}

Результат работы программы:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]