Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

работа с файлами / ЛР№15 - C#, Файлы

.pdf
Скачиваний:
40
Добавлен:
05.02.2016
Размер:
163.55 Кб
Скачать

Министерство образования Республики Беларусь БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ Кафедра "Электропривод и АПУ"

Э

П

Курс

"Информатика"

Методические указания по лабораторной работе №15

Файлы

г. Могилев 2008

2

Файлы. Методические указания по лабораторной работе №14 по дисциплине «Информатика». Для студентов очной формы обучения специальности 140607 «Электрооборудование автомобилей и тракторов».

Лабораторная работа разработана доцентом кафедры «Электопривод и АПУ» К.В. Овсянниковым

БЕЛОРУССКО-РОССИЙСКИЙ УНИВЕРСИТЕТ

 

 

 

3

Содержание

 

1

Цель работы ......................................................................................................................................

4

2

Ход работы........................................................................................................................................

5

 

2.1

Получение индивидуального задания .....................................................................................

5

 

2.2

Оформление отчета ...................................................................................................................

5

3

Содержание отчета...........................................................................................................................

6

4

Краткие теоретические сведения....................................................................................................

7

 

4.1

Создание потоков, связанных с файлами................................................................................

7

 

4.2

Работа с текстовыми файлами ...............................................................................................

11

5. Задания ...........................................................................................................................................

14

Литература .........................................................................................................................................

16

4

1 Цель работы

Целью лабораторной работы является:

1)Изучение принципов работы с файлами;

2)Изучение классов связанных с файловыми операциями.

5

2 Ход работы

2.1 Получение индивидуального задания

Вначале следует получить индивидуальное задание у преподавателя, проводящего лабора- торную работу. Варианты заданий приводятся в разделе 5.

2.2 Оформление отчета

Отчет оформляется индивидуально каждым студентом. Отчет должен содержать задание, ал- горитм и листинг программы.

6

3 Содержание отчета

Отчет по лабораторной работе выполняется на листах формата А4. В состав отчета входят:

1)титульный лист;

2)цель работы;

3)текст индивидуального задания;

4)выполнение индивидуального задания.

7

4 Краткие теоретические сведения

4.1 Создание потоков, связанных с файлами

Если вам нужно создать входной или выходной поток, связанный с локальным файлом, со- держащим двоичные данные, следует воспользоваться классами BinaryWriter и BinaryReader из биб- лиотеки Microsoft .NET Framework. Что же касается чтения из файла или записи в файл текстовых данных, то для решения этой задачи обычно используются классы StreamReader и StreamWriter.

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

Открытие потока FileStream

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

FileStream fs = new FileStream("mayfile.dat", FileMode.CreateNew);

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

Таблица 4.1 - Режимы открытия файла FileMode

Режим

Описание

 

 

Append

Если файл существует, он открывается. Текущая позиция устанавливается на

 

конец файла. Если указанного файла нет, то он создается. Этот режим можно

 

использовать только совместно с режимом доступа FileAccess .Write.

 

При попытке чтения из файла, открытого подобным образом, возникает ис-

 

ключение ArgumentException

 

 

Create

ОС должна создать новый файл. Если указанный файл уже существует, он бу-

 

дет перезаписан

 

 

CreateNew

ОС должна создать новый файл. Если указанный файл уже существует, воз-

 

никнет исключение IOException

 

 

Open

Требуется открыть существующий файл. Необходим доступ FilelOPerraissio-

 

nAccess.Read. Если требуемый файл не найден, возникает исключение Sys-

 

tem.FileNotFoundException

 

 

OpenOrCreate

Если указанный файл существует, он должен быть открыт.

 

В противном случае ОС должна создать и открыть указанный файл

 

 

 

8

Truncate

Требуется открыть существующий файл. После открытия файл обрезается до

 

нулевой длины, при этом все ранее хранившиеся в нем данные пропадают.

 

При попытке чтения из файла, открытого подобным образом, возникает ис-

 

ключение

 

 

Взависимости от того, для какой цели создается файл, вы можете выбрать тот или иной ре- жим открытия потока. Например, если поток, связанный с файлом, открывается только для чтения, выбирайте режим FileMode.Open. В этом случае будет открыт существующий файл. Если же файл открывается для записи, то вы можете либо открыть существующий файл, перезаписав его содержи- мое или дописав в него новые данные, а также создать новый файл.

Вклассе FileStream существует несколько конструкторов, позволяющих определить не только путь к файлу, но и режим его открытия, разрешенный доступ к файлу и режим совместного исполь- зования файла:

FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);

FileStream fsl = new FileStream(name, FileMode.Open, FileAccess.Read, File-

Share.Read);

Остановимся на режиме доступа к файлу, передаваемом приведенным выше конструкторам через третий параметр (табл. 4.2). Режим доступа задается как статическая константа класса FileAccess.

Таблица 4.2 - Режимы доступа FileAccess

Режим

Тип доступа

 

 

Read

Доступ только на чтение

 

 

ReadWrite

Доступ на чтение и запись

 

 

Write

Доступ на запись

 

 

При необходимости программа может задать режим совместного использования файла, когда для одного и того же файла одновременно создается несколько потоков. Этот режим задается при помощи статических констант класса FileShare (табл. 4.3).

 

Таблица 4.3 - Режимы совместного использования файла FileShare

 

 

Режим

Тип доступа

 

 

Inheritable

Идентификатор файла может наследоваться дочерним процессом

 

 

None

Запрет совместного использования файла. Любые дополнительные запросы

 

на открытие файла будут запрещены то тех пор, пока файл не будет закрыт

 

 

Read

Допускаются дополнительные запросы на открытие файла для чтения

 

 

 

9

ReadWrite

Допускаются дополнительные запросы на чтение и запись

 

 

Write

Допускаются дополнительные запросы на запись

 

 

Открытие потоков Binary Writer и BinaryReader

Итак, ваша программа создала поток на базе файла, воспользовавшись для этого классом FileStream. Далее на базе полученного таким образом потока необходимо создать потоки классов BinaryWriter и BinaryReader, предназначенные соответственно для записи в файл и чтения из файла дво- ичных данных;

BinaryWriter bw = new BinaryWriter(fs); BinaryReader br = new BinaryReader(fs);

Закрытие потоков

После того как программа завершила работу с потоками, она должна их закрыть.

Для закрытия потоков используйте метод Close. Закрывайте потоки в порядке, обратном от- крытию. Если вы вначале открыли поток FileStream, а затем создали на его базе потоки класса BinaryWriter и BinaryReader, то закрывать потоки нужно в обратном порядке: вначале закройте потоки

BinaryWriter и BinaryReader, а затем поток FileStream:

FileStream fs

= new FileStream("myfile.datн, FileMode.CreateNew);

BinaryWriter bw = new BinaryWriter(fs);

BinaryReader br = new BinaryReader(fs);

// Работа с потоками

bw.Close();

br.Close();

fs.Close();

Запись двоичных данных

Для записи двоичных данных в поток BinaryWriter предусмотрено несколько перегруженных методов Write, приведенных ниже:

public virtual void Write(bool); public virtual void Write(byte); public virtual void Write(byte[]); public virtual void Write(char); public virtual void Write(char[]); public virtual void Write(decimal); public virtual void Write(double); public virtual void Write(short); public virtual void Write(int); public virtual void Write(long);

10

public virtual void Write(sbyte); public virtual void Write(float); public virtual void Write(uint); public virtual void Write(ulong); public virtual void Write(string);

public virtual void Write(byte[], int, int); public virtual void Write(char[], int, int) ,-

Способ применения большинства перечисленных методов интуитивно ясен: для записи дан- ных того или иного типа в файл вам нужно передать ссылку на экземпляр данных в качестве пара- метра методу Write. В зависимости от типа данных компилятор выберет нужную перегруженную версию этого метода.

При записи в двоичный поток текстовой строки string она будет предваряться префиксом, со- держащим значение длины строки. Строка будет записана в кодировке ASCII.

Последние два перегруженных метода Write позволяют записать в поток массив соответст- венно двоичных байтов и символов UNICODE. Второй параметр метода задает начальный индекс блока данных в массиве, а третий размер блока (соответственно в байтах и символах).

Чтение двоичных данных

Чтобы прочитать данные из потока BinaryReader, нужно использовать один из методов, спе- циально предусмотренных для этого в классе BinaryReader. Мы привели краткий список этих мето- дов в табл. 4.4.

 

Таблица 4.4 - Методы для чтения данных класса BinaryReader

 

 

Метод

Тип данных, считываемых из потока

 

 

ReadBoolean

Один объект типа Boolean

 

 

ReadByte

1 байт данных

 

 

ReadBytes

Чтение заданного количества байтов данных

 

 

ReadChar

Один текстовый символ

 

 

ReadChars

Чтение заданного количества текстовых символов

 

 

ReadDecimal

Десятичное значение размером 16 байт

 

 

ReadSingle

Значение с плавающей десятичной точкой размером 4 байта

 

 

ReadDouble

Значение с плавающей десятичной точкой размером 8 байт

 

 

ReadSByte

Число со знаком размером 1 байт

 

 

Readlntl6

Число со знаком размером 2 байта

 

 

Readlnt32

Число со знаком размером 4 байта

 

 

Соседние файлы в папке работа с файлами