Добавить в цитаты Настройки чтения

Страница 218 из 502

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

<b>/* Скопировать файл, используя метод File.Copy().</b>

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

<b>CopyFile FIRST.DAT SECOND.DAT</b>

<b>*/</b>

<b>using System; </b>

<b>using System.IO;</b>

<b>class CopyFile {</b>

<b>  static void Main(string[ ] args) {</b>

<b>    if (args.Length != 2) {</b>

<b>      Console.WriteLine(&quot;Применение: CopyFile Откуда Куда&quot;);</b>

<b>      return;</b>

<b>    }</b>

<b>    // Копировать файлы, </b>

<b>    try {</b>

<b>      File.Copy(args[0], args[1]);</b>

<b>    } catch(IOException exc) {</b>

<b>      Console.WriteLine(&quot;Ошибка копирования файла&quot; + exc.Message);</b>

<b>    }</b>

<b>  }</b>

<b>}</b>

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

С помощью методов класса File очень легко получить нужные сведения о файле. Рассмотрим два таких метода: Exists() и GetLastAccessTime(). Метод Exists() определяет, существует ли файл, а метод GetLastAccessTime() возвращает дату и время последнего доступа к файлу. Ниже приведены формы объявления обоих методов.

<b>static bool Exists(string путь)</b>

<b>static DateTime GetLastAccessTime(string путь)</b>

В обоих методах путь обозначает файл, сведения о котором требуется получить. Метод Exists() возвращает логическое значение true, если файл существует и доступен для вызывающего процесса. А метод GetLastAccessTime() возвращает структуру DateTime, содержащую дату и время последнего доступа к файлу. (Структура DateTime описывается далее в этой книге, но метод ToString() автоматически приводит дату и время к удобочитаемому виду.) С указанием недействительных аргументов или прав доступа при вызове обоих рассматриваемых здесь методов может быть связан целый ряд исключений, но в действительности генерируется только исключение IOException.

В приведенном ниже примере программы методы Exists() и GetLastAccessTime() демонстрируются в действии. В этой программе сначала определяется, существует ли файл под названием test.txt. Если он существует, то на экран выводит время последнего доступа к нему.

<b>// Применить методы Exists() и GetLastAccessTime() .</b>

<b>using System;</b>

<b>using System.IO;</b>

<b>class ExistsDemo {</b>

<b>  static void Main() {</b>

<b>    if(File.Exists(&quot;test.txt&quot;))</b>

<b>      Console.WriteLine(&quot;Файл существует. В последний&quot;+</b>

<b>         &quot; раз он был доступен &quot; + File.GetLastAccessTime(&quot;test.txt&quot;));</b>

<b>    else</b>

<b>    Console.WriteLine(&quot;Файл не существует&quot;);</b>

<b>  }</b>

<b>}</b>

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

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

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