Работа с путями к файлам в .NET

Завершено

В .NET имеется встроенный механизм для работы с путями в файловой системе.

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

Здесь вы узнаете о некоторых константах и служебных функциях в System.IO пространстве имен и System.Environment типе, чтобы сделать программу более гибкой и более устойчивой.

Определение текущего каталога

Иногда вы не знаете, какой каталог или путь к программе следует выполнить. Предположим, что вы хотите, чтобы программа использовала текущий каталог, но не знаете путь.

.NET предоставляет полный путь к текущему каталогу с помощью метода Directory.GetCurrentDirectory.

Console.WriteLine(Directory.GetCurrentDirectory());

Если выполнить приведенный выше код из папки 201 в следующей структуре, функция Directory.GetCurrentDirectory() вернет значение stores\201:

📂 stores
    📂 201

Работа со специальными каталогами

.NET может работать везде: в Windows, macOS, Linux и даже в мобильных операционных системах, таких как iOS и Android. Каждая операционная система может иметь концепцию специальных системных папок. Например, домашний каталог, выделенный для файлов, определенных пользователем, или классический каталог или каталог для хранения временных файлов.

Эти типы специальных каталогов различаются в разных операционных системах. Было бы неудобно пытаться запомнить структуру каталогов каждой операционной системы и выполнять ветвление в зависимости от текущей ОС.

В перечислении System.Environment.SpecialFolder содержатся константы для получения путей к специальным системным папкам.

Следующий код возвращает путь к эквиваленту папки Windows My Documents или каталога HOME пользователя для любой операционной системы, даже если код выполняется в Linux:

string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

Работа с путями

Пути используются так часто, что в .NET есть класс Path, специально предназначенный для работы с ними.

Класс Path находится в пространстве имен System.IO в .NET, и не требует установки.

Специальные символы пути

Разные операционные системы используют разные символы для разделения уровней каталогов.

Например, в Windows используется обратная косая черта (stores\201), а в macOS — прямая косая черта (stores/201).

Чтобы обеспечить использование правильного символа, класс Path содержит поле DirectorySeparatorChar.

.NET автоматически интерпретирует это поле в знак разделения, который зависит от используемой операционной системы, если требуется создать путь вручную.

Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");

// returns:
// stores\201 on Windows
//
// stores/201 on macOS

Объединение путей

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

Например, если нужно получить путь к папке stores/201, можно использовать функцию Path.Combine.

Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201

Помните, что вместо строк жесткого программирования следует использовать Path.Combine или Path.DirectorySeparatorChar класс, так как программа может работать в различных операционных системах. Класс Path всегда форматирует пути для операционной системы, в которую она работает.

Совет

Классу Path не важно, существуют ли объекты на самом деле. Пути являются концептуальными, а не физическими, и класс создает и анализирует строки за вас.

Определение расширений имен файлов

Класс Path также может сообщить расширение для указанного имени файла. Если у вас есть файл и нужно выяснить, является ли он файлом JSON, вы можете использовать функцию Path.GetExtension.

Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json

Получение необходимых сведений о файле или пути

Класс Path содержит множество различных методов, которые выполняют различные действия. Большинство сведений о каталоге или файле можно получить с помощью классов DirectoryInfo и FileInfo соответственно.

string fileName = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json";

FileInfo info = new FileInfo(fileName);

Console.WriteLine($"Full Name: {info.FullName}{Environment.NewLine}Directory: {info.Directory}{Environment.NewLine}Extension: {info.Extension}{Environment.NewLine}Create Date: {info.CreationTime}"); // And many more

Существуют гораздо более полезные свойства и служебные методы в Pathклассах DirectoryInfo, но FileInfo эти основные понятия являются наиболее часто используемыми. В следующем упражнении вы создадите пути и определите файлы JSON.