Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №3 ООП.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
115.71 Кб
Скачать

Елабужский филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования

«Казанский национальный исследовательский технический университет им. А.Н. Туполева – КАИ»

Лабораторная работа №3

по дисциплине

“Объектно-ориентированное программирование”

Файлы

Елабуга 2013

Лабораторная работа №3 Файлы

Цель: Научиться писать программы на C#, работающие с файлами.

  1. Теоретические сведения

В C# ввод/вывод данных реализуют с помощью потоков. Под потоком понимается вывод либо получение информации. Поток связан с физическим устройством посредством системы ввода/вывода C#. Потоки используются для работы с консолью и файлами.

На самом низком уровне все операции ввода/вывода в C# оперируют байтами, потому что большинство устройств, предназначенных для выполнения операций ввода/вывода, являются байт-ориентированными. Но байтовые потоки неудобно использовать при выполнении символьного ввода/вывода. Преимущество символьных потоков проявляется в том, что они оперируют непосредственно с символами Unicode. Поэтому, если возникает потребность в хранении текста Unicode, наилучшим выбором в этом случае будут символьные потоки. Поэтому в C# используются несколько классов, преобразующих байтовые потоки в символьные и обратно.

Рассмотрим сначала байт-ориентированный ввод/вывод в файл, а затем символьный.

    1. Байт-ориентированный ввод/вывод в файл

Для создания байтового потока, связанного с файлом, используется класс FileStream. Все классы потоков (в том числе и класс FileStream) определены в пространстве имен System.IO. Поэтому обычно в начало любой программы, применяющей классы потоков, включается конструкция:

using System.IO;

Открытие и закрытие файла

При создании байтового потока, связанного с файлом, требуется сформировать объект FileStream. Синтаксис создания следующий:

FileStream(string filename, FileMode mode);

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

mode – определяет, каким образом открывается файл. Может принимать одно из следующих значений (таблица 1).

Таблица 1

Значение

Описание

FileMode.Append

Выводимые данные добавляются после данных, находящихся в файле.

FileMode.Create

Создается новый выходной файл. Любой ранее созданный файл с аналогичным именем уничтожается.

FileMode.CreateNew

Создается новый выходной файл.

FileMode.Open

Открывается существующий файл.

FileMode.OpenOrCreate

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

FileMode.Truncate

Открывается существующий файл, но его длина усекается до нуля.

При любой работе с файлами, необходимо осуществлять проверку возможных ошибок. В C# для этого используется система обработки исключений. Исключения – это возможные ошибки, возникающие при работе программы.

При открытии файла возможны следующие исключения:

  • FileNotFoundException – файл не может быть открыт, поскольку он не существует;

  • IOException – файл не открывается из-за ошибки ввода/вывода;

  • ArgumentNullException – имя файла выражается нулевым значением,

  • ArgumentException – параметр, задающий режим открытия файла, некорректен,

  • SecurityException – пользователь не имеет прав доступа,

  • DirectoryNotFoundException – указанный каталог не существует.

Рассмотрим пример открытия файла test.txt и обработки возможных исключений:

Пример 1.

FileStream fin;

try

{

fin = new FileStream("test.txt", FileMode.Open);

}

catch (FileNotFoundException exc)

{

Console.WriteLine(exc.Message);

return;

}

catch

{

Console.WriteLine("Невозможно открыть файл");

return;

}

Первый оператор catch перехватывает ошибку, связанную с невозможностью обнаружения файла. Второй оператор catch обеспечивает перехват всех остальных исключений, связанных с выполнением файловых операций.

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

FileStream(string filename, FileMode mode, FileAccess how)

Параметр how задает способ доступа к файлу:

FileAccess.Read FileAccess.Write FileAccess.ReadWrite

Например, следующая строка открывает файл только для чтения:

FileStream fin = new FileStream("test.dat", FileMode.Open, FileAccess.Read);

Если работа с файлом была завершена, необходимо закрыть его, используя метод Close().

При закрытии файла происходит освобождение системных ресурсов, выделенных для файла. С этого момента они становятся доступными при обработке другого файла. Метод Сlose() может генерировать исключение IOException.