
- •10.3. Файлы прямого доступа
- •10.3.1. Запись в двоичный файл
- •10.3.2. Чтение двоичного файла
- •Создать поток FileStream;
- •Методом Close(), освободив промежуточный буфер, закрыть файл;
- •Методом Close(), закрыть файловый поток.
- •10.3.3. Запись строки в файл прямого доступа
- •Методом Close(), закрыть файловый поток.
- •10.3.4. Чтение строки из файла прямого доступа
- •Cоздать поток FileStream;
- •Методом Close(), закрыть файловый поток.
- •10.3.5. Запись и чтение массива
- •10.3.6. Запись и чтение типизированного файла
- •10.3.7. Пример бд «Студенты»
- •10.4. Другие классы для работы с файлами
- •10.4.1. Классы File и Directory
- •10.4.2. Класс FileInfо
- •10.4.3. Класс DirectoryInfо
10.4. Другие классы для работы с файлами
10.4.1. Классы File и Directory
Служебные классы File и Directory предоставляют множество статических методов для исчерпывающего манипулирования файлами и папками. Эти методы дают возможность перемещать файлы, опрашивать и обновлять атрибуты, а также создавать объекты FileStream. Напомним, что статические методы могут вызываться на классах без создания их экземпляров.
Некоторые из наиболее полезных статических методов класса File перечислены в табл. 10.2.
Таблица 10.2.
Некоторые статические методы классов File, Directory
Метод |
Описание |
Сору () |
Копирует файл из исходного местоположения в целевое |
Create () |
Создает файл по указанному пути |
Delete () |
Удалят файл |
Open () |
Возвращает объект FileStream, созданный для файла, который находится по указанному пути |
Move () |
Перемещает указанный файл в новое место. Можно специфицировать другое имя файла в его новом местоположении |
CreateDirectory () |
Создает каталог с указанным путем |
Delete () |
Удаляет указанный каталог и все файлы внутри него |
GetDirectories () |
Возвращает массив объектов string, представляющих имена каталогов внутри указанного каталога |
GetFiles () |
Возвращает массив объектов string, представляющих имена файлов, находящихся в указанном каталоге |
GetFileSystemEntnes () |
Возвращает массив объектов string, представляющих имена файлов и каталогов внутри указанного каталога |
Move () |
Перемещает указанный каталог в новое место. Вы можете специфицировать другое имя папки в его новом местоположении |
10.4.2. Класс FileInfо
В отличие от класса File, класс FileInfо не является статическим и не имеет статических методов. Этот класс может использоваться только при создании его экземпляров. Объект FileInfo представляет файл на диске или сетевом ресурсе, и можно создавать его, указывая путь к файлу:
FileInfo aFile = new FileInfo(@"C:\Temp.txt");
Можно также передать имя каталога конструктору FileInfo, хотя в практическом смысле это не слишком удобно, поскольку требует инициализации базового класса для FileInfo, которым является FileSystemInfo, информацией каталога, но ни один из методов FileInfo или свойств, относящихся к файлам, не будет использован.
Многие методы, представленные классом FileInfo, подобны методам класса File, но поскольку File — статический класс, он требует строкового параметра, специфицирующего местоположение файла для каждого вызова метода. Поэтому показанные ниже вызовы делают одно и то же:
FileInfo aFile = new FileInfo("Data.txt");
if (aFile.Exists)
Console.WriteLine("файл существует");
if (File.Exists("Data.txt"))
Console.WriteLine("файл существует");
В этом коде выполняется проверка существования файла Data.txt. Обратите внимание, что здесь не специфицируется никакой информации о каталоге; это означает, что наличие файла проверяется только в текущем рабочем каталоге.
Большинство методов FileInfo отражают методы File, но на свой лад. В большинстве случаев не имеет значения, какую технику вы предпочтете, тем не менее, следующие критерии могут помочь выбрать более подходящую.
Имеет смысл использовать методы статического класса File, если вы осуществляете единственный вызов метода — такой вызов будет быстрее, потому что .NET Framework не нужно проходить процесс создания экземпляра нового объекта с последующим вызовом его метода.
Если приложение выполняет несколько операций с файлом, то более оправдано создать экземпляр объекта FileInfo и пользоваться его методами; это позволит сэкономить время, потому что объект будет уже ссылаться на правильный файл в файловой системе, в то время как статический класс вынужден находить его каждый раз заново.
Класс FileInfo также предоставляет свойства лежащего в основе файла, часть из которых позволяет выполнять его обновление. Многие из этих свойств унаследованы от FileSystemInfо и потому применимы как к File, так и к Directory. Свойства класса FileSystemInfо перечислены в табл. 10.4.
Таблица 10.4.
Свойства класса FileSystemlnfо
Свойство |
Описание |
Attributes |
Получает или устанавливает атрибуты текущего файла или каталога, используя перечисление FileAttributes |
CreationTime |
Получает или устанавливает дату и время текущего файла |
Extension |
Извлекает расширение файла. Свойство доступно только для чтения |
Exists |
Определяет, существует ли файл. Доступное только для чтения абстрактное свойство, переопределенное в Filelnfo и Directorylnfo |
FullName |
Извлекает полный путь файла. Свойство доступно только для чтения |
LastAccessTime |
Получает или устанавливает дату и время последнего обращения к текущему файлу |
LastwnteTime |
Получает или устанавливает дату и время последней записи в текущий файл |
Name |
Извлекает полный путь файла. Доступное только для чтения абстрактное свойство, переопределенное в Filelnfo и Directorylnfo |
Свойства, специфичные для FileInfo, описаны в табл. 10.5.
Таблица 10.5.
Свойства класса FileInfo
Свойство |
Описание |
Directory |
Извлекает объект DirectoryInfo, представляющий каталог, который содержит текущий файл. Только для чтения |
DirectoryName |
Путь каталога файла. Только для чтения |
isReadOnly |
Ссылка на атрибут файла "только для чтения". Это свойство также доступно через Attributes |
Length |
Размер файла в байтах типа long. Только для чтения |
Объект FileInfo сам по себе не представляет поток. Чтобы прочесть или записать в файл, необходимо создать объект Stream. Объект FileInfo помогает в этом, предлагая несколько методов, возвращающих экземпляры объектов Stream.