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

Классы файлового ввода-вывода

Потоковые классы расположены в пространстве имен System.IO, вместе с другими классами, которые используются для управления каталогами и файлами. Чтобы подроб­нее ознакомиться с ними, следует обратиться к документации библиотеки .NET (отно­сительно пространства имен System.IO).

Экземпляр класса FileInfo инкапсулирует файл в каталоге файловой системы компьютера. Он позволяет работать с файлом разными методами, служит для получения подробных о нем сведе­ний.

Экземпляр класса FileInfo представляет файл в файловой системе компьютера. Он позволяет получать и изменять данные о файле создавать новые и удалять ненужные файлы.

Классы StreamReader, StreamWriter - это символьные потоки ввода-вывода. Экземпляры классов StreamReader и StreamWriter представляют потоки, предназна­ченные соответственно, для чтения или записи текста (в текстовый файл).

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

Если программа включает в себя только текстовые данные, следует воспользовать­ся классами StreamReader и StreamWriter, поскольку для этой цели они более удобны.

Обратим внимание на то, что объект FileInfo не представляет собой поток. Для дос­тупа к объектам StreamReader и StreamWriter, обеспечивающим работу с файлом из объекта FileInfo, нужно использовать методы OpenText и CreateText.

По аналогии, методы OpenRead и OpenWrite объекта FileInfo можно использовать для получения объекта FileStream, который и обеспечит чтение и запись информации в ас­социированный ему бинарный или текстовый файл.

Класс FileInfo

При создании нового объекта FileInfo, необходимо связать его с основным файлом — передать конструктору строку с именем последнего. Это имя может относиться не толь­ко к уже существующему, но и к создаваемому файлу. О процессе создания файлов с помощью FileInfo мы расскажем далее.

Предположим, что файл C:\MyTestFile\myFile.txt уже существует. Следующий оператор создает объект FileInfo по имени myFileObj, который представляет собой файл myFile.txt, расположенный в каталоге C:\MyTestFile:

FileInfo myFileObj = new FileInfo(@"C:\MyTestFile\myFile.txt");

Рассмотрим некоторые члены класса FileInfo:

СоруТо копирует файл, представленный объектом Fllelnfo, в новый файл.

Delete удаляет файл, представленный объектом Fllelnfo

FullName возвращает полное (включая путь) имя файла, представленного объектом Filelnfo

Length возвращает размер (в байтах) файла, представленного объектом Filelnfo

Name возвращает краткое (без указания пути) имя файла, представленного объектом FileInfo.

Пример. Написать программу, которая при помощи описанных выше методов выводит информацию о файле и копирует один файл в другой.

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

namespace Файлы

{

class Program

{

static void Main(string[] args)

{

try

{

FileInfo myFileObj = new FileInfo(@"D:\MyTestFile\myFile.txt");

Console.WriteLine("Имя файла " + myFileObj.Name);

Console.WriteLine("Полное имя файла " + myFileObj.FullName);

Console.WriteLine("Размер файла " + myFileObj.Length);

Console.WriteLine("Дата создания файла " + myFileObj.CreationTime);

myFileObj.CopyTo(@"D:\myTestFile\myYourFile.txt", true);

}

catch (IOException exObj)

{

Console.WriteLine(exObj);

}

Console.ReadLine();

}

}

}

Строка using System.IO; добавлена, чтобы не указывать пространство имен System.IO перед Filelnfo.

Стоит отметить, что рабочий файл часто остается надолго открытым. За этот промежуток времени дру­гие программы могут получить к нему доступ и его изменить. Как результат, файл мо­жет быть случайно удален, переименован, его содержимое изменено. При попытке об­ращения к несуществующему файлу, возникнет исключение. Поэтому весьма важно умело использовать механизм обработки исключений С#.

System.IO содержит еще один класс — File, имеющий функциональность, сходную с фун­кциональностью класса FileInfo. В отличие от FileInfo, элементы класса File объявлены как static. При использовании класса File создавать новый объект (как при FileInfo) не требуется. Например, чтобы скопировать файл C:\MyTestFiles\MyFile.txt в C:\MyTestFiles\YourFile.txt, можно воспользоваться методом Сору класса File без предварительного создания объекте:

File.Copy(@"C:\MyTestFile\myFile.txt",@"C:\myTestFile\myYourFile_.txt" );

Зачем же тогда применять FileInfo? Вызов каж­дого метода класса File требует дополнительных ресурсов процессора, так как проверке безопасного доступа к файлу производится многократно (даже если к одному и тому же файлу обращаются с помощью разных методов). Класс FileInfo производит только одну проверку — при создании объекта FileInfo. После ее завершения вся остальная обработ­ка происходит без проверок безопасности.