предоставляет некоторые статические методы, которые облегчают работу с путями доступа. Например, предположим, что необходимо вывести имя полного пути доступа для файла ReadMe.txt
в папке C:My Documents
. Путь доступа к файлу можно найти с помощью следующей операции:
Console.WriteLine(Path.Combine(@'C:My Documents', 'ReadMe.txt'));
Использовать класс Path значительно проще, чем пытаться справиться с символами-разделителями вручную, потому что класс Path
знает различные форматы имен путей доступа в различных операционных системах. Во время написания книги Windows являлась единственной операционной системой, поддерживаемой .NET, но если, например, .NET будет в дальнейшем перенесена на Unix, то Path
сможет справиться с путями доступа Unix, где в качестве разделителя в именах путей доступа используется /, а не . Path.Combine
является методом этого класса, который будет вероятно использоваться чаще всего, но Path
реализует также другие методы, которые предоставляют информацию о пути доступа или требуемом для него формате.
В следующем разделе будет дан пример, который поясняет, как просмотреть каталоги и увидеть свойства файлов
Пример: файловый браузер
В этом разделе представлен пример приложения C#, называемого FileProperties
. FileProperties
представляет простой интерфейс пользователя, который позволяет перемещаться по файловой системе и видеть время создания время последнего доступа, время последней записи и размер файлов.
Приложение FileProperties
выглядит следующим образом. Пользователь вводит имя папки или файла в основное текстовое поле в верхней части окна и нажимает кнопку Display
. Если вводится путь доступа к папке, ее содержимое выводится в окне списка. Если ввести путь доступа к файлу, то данные о нем появятся в текстовых полях в нижней части формы, а содержимое папки — в окне списка. На экране показано приложение FileProperties
, используемое для просмотра папки:
Пользователь может очень легко перемещаться по файловой системе, щелкая мышью на любой из папок в правом окне списка для перехода в эту папку или на кнопке Up для перемещения в родительскую папку. На приведенном выше экране в основном текстовом поле введено C:4990, чтобы получить содержимое этого раздела, который использует окно списка для дальнейшего перемещения. Пользователь может также выбрать файл, щелкая на его имени в окне списка, в этом случае его свойства выводятся в текстовых полях:
Обратите внимание, что при желании можно также вывести время создания, время последнего доступа и время последнего изменения для папок — DirectoryInfo
реализует соответствующие свойства. Мы выводим эти свойства только для выбранного файла, чтобы сохранить простоту приложения.
Мы создаем проект как стандартное приложение C# Windows в Visual Studio.NET и добавляем различные текстовые поля и окно списка из области Windows Forms в панели инструментов. Затем элементы управления переименовываются в более понятные имена txtBoxInput
, txtBoxFolder
, buttonDisplay
, buttonUp
, listBoxFiles
, listBoxFolders
, textBoxFileName
, textBoxCreationTime
, txtBoxLastAccessTime
, txtBoxLasrWriteTime
и textBoxFileSize
.
После чего добавляется следующий код:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.IO;
Нам необходимо делать это для всех примеров в этой главе, связанных с файловой системой, но мы не будем явно показывать этот код в остальных примерах. Затем к основной форме добавляется поле- член:
public class Form1 : System.Windows.Forms.Form {
#region Member Fields
private string currentFolderPath;
currentFolderPath
будет содержать путь доступа папки, содержимое которой будет выводится в данный момент в окне списка.
Теперь нам нужно добавить обработку генерируемых пользователем событий. При этом возможны следующие способы вывода:
□ Пользователь щелкает на кнопке Display. В этом случае необходимо определить, что введенный пользователем текст в основном текстовом поле является путем доступа к файлу или папке. Если это папка, мы перечисляем файлы и вложенные папки этой папки в окне списка. Если это файл, мы делаем это для папки, содержащей этот файл, но также выводим свойства файла в нижних текстовых полях.
□ Пользователь щелкает на имени файла в окне списка Files. В этом случае мы выводим свойства этого файла в нижних текстовых полях.
□ Пользователь щелкает на имени папки в окне списка Folders. В этом случае мы очищаем все элементы управления и затем выводим содержимое этой вложенной папки в окне списка.
□ Пользователь щелкает на кнопке Up. В этом случае мы очищаем все элементы управления и затем выводим содержимое родительской папки в окне списка.
Прежде чем показать код обработчиков событий, приведем код методов. Для начала необходимо очистить содержимое всех элементов управления. Этот метод вполне очевиден:
protected void ClearAllFields() {
listBoxFolders.Items.Clear();
listBoxFiles.Items.Clear();
txtBoxFolder.Text = '';
txtBoxFileName.Text = '';
txtBoxCreationTime.Text = '';
txtBoxLastAccessTime.Text = '';
txtBoxLastWriteTime.Text = '';
txtBoxSize.Text ='';
}
Затем определяется метод DisplayFileInfo()
, который обрабатывает процесс вывода информации для заданного файла в текстовых полях. Этот метод получает один параметр, полное имя пути доступа файла и работает, создавая объект FileInfo
на основе этого пути доступа:
protected void DisplayFileInfo(string fileFullName) {
txtBoxFileName.Text = TheFile.Name;
txtBoxCreationTime.Text = TheFile.CreationTime.ToLongTimeString();
txtBoxLastAccessTime.Text = TheFile.LastAccessTime.ToLongDateString();
txtBoxLastWriteTime.Text = TheFile.LastWriteTime.ToLongDateString();
txtBoxFileSize.Text = TheFile.Length.ToString() + ' bytes';
}
Отметим, что здесь мы воздержались от порождения исключения в случае каких-либо проблем с