Книга: C# 4.0: полное руководство
Класс File
Разделы на этой странице:
Класс File
В среде .NET Framework определен класс File
, который может оказаться полезным для работы с файлами, поскольку он содержит несколько статических методов, выполняющих типичные операции над файлами. В частности, в классе File
имеются методы для копирования и перемещения, шифрования и расшифровывания, удаления файлов, а также для получения и задания информации о файлах, включая сведения об их существовании, времени создания, последнего доступа и различные атрибуты файлов (только для чтения, скрытых и пр.). Кроме того, в классе File
имеется ряд удобных методов для чтения из файлов и записи в них, открытия файла и получения ссылки типа FileStream
на него. В классе File
содержится слишком много методов для подробного их рассмотрения, поэтому мы уделим внимание только трем из них. Сначала будет представлен метод Сору()
, а затем — методы Exists()
и GetLastAccessTime()
. На примере этих методов вы сможете получить ясное представление о том, насколько удобны методы, доступные в классе File
. И тогда вам станет ясно, что класс File
определенно заслуживает более тщательного изучения.
-------------------------------------
СОВЕТ
Ряд методов для работы с файлами определен также в классе Filelnfo. Этот класс отличается от класса File одним, очень важным преимуществом: для операций над файлами он предоставляет методы экземпляра и свойства, а не статические методы. Поэтому для выполнения нескольких операций над одним и тем же файлом лучше воспользоваться классом Filelnfo.
-------------------------------------
Копирование файлов с помощью метода Сору()
Ранее в этой главе демонстрировался пример программы, в которой файл копировался вручную путем чтения байтов из одного файла и записи в другой. И хотя задача копирования файлов не представляет особых трудностей, ее можно полностью автоматизировать с помощью метода Сору()
, определенного в классе File
. Ниже представлены две формы его объявления.
static void Copy (string имя_исходного_файла, string имя_целевого_файла)
static void Copy (string имя_исходного_файла, string имя_целевого_файла, boolean overwrite)
Метод Copy()
копирует файл, на который указывает имя_исходного_файла, в файл, на который указывает имя_целевого_файла. В первой форме данный метод копирует файл только в том случае, если файл, на который указывает имя_целево-го_файла, еще не существует. А во второй форме копия заменяет и перезаписывает целевой файл, если он существует и если параметр overwrite принимает логическое значение true
. Но в обоих случаям может быть сгенерировано несколько видов исключений, включая IOException
и FileNotFoundException
.
В приведенном ниже примере программы метод Сору()
применяется для копирования файла. Имена исходного и целевого файлов указываются в командной строке. Обратите внимание, насколько эта программа короче демонстрировавшейся ранее. Кроме того, она более эффективна.
/* Скопировать файл, используя метод File.Copy().
Чтобы воспользоваться этой программой, укажите имя исходного и целевого файлов. Например, чтобы скопировать файл FIRST.DAT в файл SECOND.DAT, введите в командной строке следующее:
CopyFile FIRST.DAT SECOND.DAT
*/
using System;
using System.IO;
class CopyFile {
static void Main(string[ ] args) {
if (args.Length != 2) {
Console.WriteLine("Применение: CopyFile Откуда Куда");
return;
}
// Копировать файлы,
try {
File.Copy(args[0], args[1]);
} catch(IOException exc) {
Console.WriteLine("Ошибка копирования файла" + exc.Message);
}
}
}
Как видите, в этой программе не нужно создавать поток типа FileStream
или освобождать его ресурсы. Все это делается в методе Сору()
автоматически. Обратите также внимание на то, что в данной программе существующий файл не перезаписывается. Поэтому если целевой файл должен быть перезаписан, то для этой цели лучше воспользоваться второй из упоминавшихся ранее форм метода Сору()
.
Применение методов Exists() и GetLastAccessTime()
С помощью методов класса File
очень легко получить нужные сведения о файле. Рассмотрим два таких метода: Exists()
и GetLastAccessTime()
. Метод Exists()
определяет, существует ли файл, а метод GetLastAccessTime()
возвращает дату и время последнего доступа к файлу. Ниже приведены формы объявления обоих методов.
static bool Exists(string путь)
static DateTime GetLastAccessTime(string путь)
В обоих методах путь обозначает файл, сведения о котором требуется получить. Метод Exists()
возвращает логическое значение true
, если файл существует и доступен для вызывающего процесса. А метод GetLastAccessTime()
возвращает структуру DateTime
, содержащую дату и время последнего доступа к файлу. (Структура DateTime
описывается далее в этой книге, но метод ToString()
автоматически приводит дату и время к удобочитаемому виду.) С указанием недействительных аргументов или прав доступа при вызове обоих рассматриваемых здесь методов может быть связан целый ряд исключений, но в действительности генерируется только исключение IOException
.
В приведенном ниже примере программы методы Exists()
и GetLastAccessTime()
демонстрируются в действии. В этой программе сначала определяется, существует ли файл под названием test.txt. Если он существует, то на экран выводит время последнего доступа к нему.
// Применить методы Exists() и GetLastAccessTime() .
using System;
using System.IO;
class ExistsDemo {
static void Main() {
if(File.Exists("test.txt"))
Console.WriteLine("Файл существует. В последний"+
" раз он был доступен " + File.GetLastAccessTime("test.txt"));
else
Console.WriteLine("Файл не существует");
}
}
Кроме того, время создания файла можно выяснить, вызвав метод GetCreationTime()
, а время последней записи в файл, вызвав метод GetLastWriteTime()
. Имеются также варианты этих методов для представления данных о файле в формате всеобщего скоординированного времени (UTC). Попробуйте поэкспериментировать с ними.
- Организация системы ввода-вывода в C# на потоках
- Классы потоков
- Консольный ввод-вывод
- Класс FileStream и байтовый ввод-вывод в файл
- Символьный ввод-вывод в файл
- Переадресация стандартных потоков
- Демонстрирование двоичного ввода-вывода
- Файлы с произвольным доступом
- Применение класса MemoryStream
- Применение классов StringReader и StringWriter
- Класс File
- Преобразование числовых строк в их внутреннее представление
- Shared Cache file
- Безопасность внешних таблиц. Параметр EXTERNAL FILE DIRECTORY
- Chapter 13. rc.firewall file
- 4.3.3. Makefile Targets
- Что это за файл – pagefile.sys?
- Для чего нужны папки Windows, Documents and Settings, Program Files и Temp?
- Можно ли указать использование по умолчанию вместо C:Program Files другого каталога для установки программ?
- Можно ли удалять из папки Program Files папки деинсталлированных программ?
- Диски С: и D: невозможно открыть простым щелчком кнопки мыши. Появляется сообщение Не найден файл file.exe. Что делать?
- 10.2 Modifying the .emacs File Directly
- Use and Edit Files in the
- Листинг 2.5. (temp_file.c) Использование функции mkstemp()