Выбрать главу

В приведенном ниже примере программы метод Сору () применяется для копирования файла. Имена исходного и целевого файлов указываются в командной строке. Обратите внимание, насколько эта программа короче демонстрировавшейся ранее. Кроме того, она более эффективна.

/* Скопировать файл, используя метод File.CopyO.

Чтобы воспользоваться этой программой, укажите имя исходного и целевого файлов. Например, чтобы скопировать файл FIRST.DAT в файл SECOND.DAT, введите в командной строке следующее:

CopyFile FIRST.DAT SECOND.DAT

*/

using System; using System.10;

class CopyFile {

static void Main(string[ ] args) { if (args.Length != 2)    {

Console.WriteLine("Применение: CopyFile Откуда Куда"); return;

}

// Копировать файлы, try {

File.Copy(args[0], args[l]);

} 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.10;

class ExistsDemo { static void Main() {

if(File.Exists("test.txt"))

Console.WriteLine("Файл существует. В последний раз он был доступен " + File.GetLastAccessTime("test.txt"));

else

Console.WriteLine("Файл не существует");

}

}

Кроме того, время создания файла можно выяснить, вызвав метод GetCreationTime (), а время последней записи в файл, вызвав метод GetLastWriteTime (). Имеются также варианты этих методов для представления данных о файле в формате всеобщего скоординированного времени (UTC). Попробуйте поэкспериментировать с ними.

Преобразование числовых строк в их внутреннее представление

Прежде чем завершить обсуждение темы ввода-вывода, рассмотрим еще один способ, который может пригодиться при чтении числовых строк. Как вам должно быть уже известно, метод WriteLineO предоставляет удобные средства для вывода различных типов данных на консоль, включая и числовые значения встроенных типов, например int или double. При этом числовые значения автоматически преобразуются методом WriteLineO в удобную для чтения текстовую форму. В то же время аналогичный метод ввода для чтения и преобразования строк с числовыми значениями в двоичный формат их внутреннего представления не предоставляется. В частности, отсутствует вариант метода Read () специально для чтения строки "100", введенной с клавиатуры, и автоматического ее преобразования в соответствующее двоичное значение, которое может быть затем сохранено в переменной типа int. Поэтому данную задачу приходится решать другими способами. И самый простой из них — воспользоваться методом Parse (), определенным для всех встроенных числовых типов данных.