- •Обзор элементов класса.
- •Класс Object
- •Структуры
- •Методы Ссылочные параметры ref и out
- •Переменное число аргументов метода
- •Перегрузка методов. Вызов методов с одинаковым именем и разными аргументами
- •Конструкторы экземпляра
- •Вызов конструктора экземпляра
- •Закрытые конструкторы экземпляра
- •Статические конструкторы
- •Конструкторы структур
- •Член со спецификатором readonly
- •Деструкторы. Сборка мусора
- •Объект Account
- •Объект Account недоступен
- •Свойства
- •Индексаторы
- •Предпосылки появления наследования
- •Синтаксис наследования.
- •Типы наследования
- •Множественное наследование
- •Наследование интерфейса
- •Виртуальные методы
- •Спецификаторы доступности
- •Вызов базовых версий функций
- •Абстрактные классы и функции
- •Структуры и наследование
- •Полиморфизм
- •Потеря и восстановление информации о типе
- •Операции is и as
- •Файловый ввод-вывод
- •Потоки данных и файловый ввод-вывод
- •Виды файлов
- •Классы файлового ввода-вывода
- •Класс FileInfo
- •Текстовый ввод-вывод при помощи Stream Reader и Stream Writer
- •Бинарный ввод и вывод при помощи класса FileStream
Классы файлового ввода-вывода
Потоковые классы расположены в пространстве имен 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. После ее завершения вся остальная обработка происходит без проверок безопасности.