Содержание
Путь — это строка, представляющая расположение файла или каталога. При этом, путь не обязательно указывает на физическое расположение чего-либо на диске. Например, путь может быть сопоставлен с расположением в памяти или на другом устройстве. Точный формат пути определяется текущей операционной системой. Так, например, в Windows системах путь может начинаться с буквы диска или тома, а в других операционных системах этот элемент может отсутствовать. В C# работа с путями осуществляется с использованием класса Path
из пространства имен System.IO
.
Path
не взаимодействуют с файловой системой и не проверяют существование файла, указанного в строке пути. Более того, большинство методов Path
могут изменять строку пути, но не влияют на имена файлов в файловой системе.Класс Path
Ниже представлены основные методы, свойства и поля класса Path
, используемые для работы с путями в C#.
- Поле
Alt
— дополнительный символ, задаваемый платформой, для разделения уровней каталогов в строке пути.Directory Separator Char - Поле
Directory
— символ, задаваемый платформой, для разделения уровней папок в строке путиSeparator Char - Поле
Path
— разделитель, задаваемый платформой, который используется в переменных среды для разделения строк путиSeparator - Поле
Volume
— предоставляет разделитель томов, задаваемый платформойSeparator Char - Метод
Change
— изменяет расширение строки путиExtension(String, String) - Метод
Combine(String[])
— объединяет массив строк в путь - Метод
Ends
— возвращает значение, указывающее, заканчивается ли заданный путь в разделителе каталогов.InDirectory Separator(String) - Метод
Get
— возвращает сведения о каталоге для указанного пути.Directory Name(String) - Метод
Get
— возвращает расширение указанной строки пути (включая точку «.»).Extension(String) - Метод
Get
— возвращает имя файла и расширение указанной строки путиFile Name(String) - Метод
Get
— возвращает имя файла указанной строки пути без расширенияFile Name Without Extension(String) - Метод
Get
— возвращает для указанной строки пути абсолютный путьFull Path(String) - Метод
Get
— возвращает абсолютный путь из относительного пути и полного базового путиFull Path(String, String) - Метод
Get
— возвращает массив, содержащий символы, которые не разрешены в именах файловInvalid File Name Chars() - Метод
Get
— возвращает массив, содержащий символы, которые не разрешены в именах путейInvalid Path Chars() - Метод
Get
— получает сведения о корневом каталоге из пути, содержащегося в указанной строкеPath Root(String) - Метод
Get
— возвращает произвольное имя каталога или файлаRandom File Name() - Метод
Get
— возвращает относительный путь от одного пути к другомуRelative Path(String, String) - Метод
Get
— создает на диске временный пустой файл с уникальным именем и возвращает полный путь этого файлаTemp File Name() - Метод
Get
— возвращает путь к временной папке текущего пользователяTemp Path() - Метод
Has
— определяет, включает ли путь расширение имени файлаExtension(String) - Метод
Is
— возвращает значение, которое показывает, является ли указанный путь к файлу фиксированным для определенного диска или UNC-путиPath Fully Qualified(String) - Метод
Is
— возвращает значение, показывающее, содержит ли указанная строка пути корневую папкуPath Rooted(String) - Метод
Join(String[])
— сцепляет массив путей в один путь - Метод
Trim
— обрезает один конечный разделитель каталогов за пределами корня указанного путиEnding Directory Separator(String)
Следует отметить, что все методы класса Path
являются кроссплатформенными, то есть они будут одинаково правильно работать в любой операционной системе.
Как в C# получить разделитель пути, запрещенные символы в путях и именах файлов?
using System; using System.IO; namespace FileSystem { class Program { static void Main(string[] args) { try { Console.WriteLine($"Разделитель уровней папок (DirectorySeparatorChar): {Path.DirectorySeparatorChar}"); Console.WriteLine($"Дополнительный разделитель уровней папок (AltDirectorySeparatorChar): {Path.AltDirectorySeparatorChar}"); Console.WriteLine($"Разделитель, который используется в переменных среды для разделения строк пути (PathSeparator): {Path.PathSeparator}"); Console.WriteLine($"Разделитель томов (VolumeSeparatorChar): {Path.VolumeSeparatorChar}"); Console.WriteLine($"Символы, запрещенные для использования в пути: {string.Concat(Path.GetInvalidPathChars())}"); Console.WriteLine($"Симмволы, запрещенные в именах файлов: {string.Concat(Path.GetInvalidFileNameChars())}"); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
Результат вывода консоли:
Дополнительный разделитель уровней папок (AltDirectorySeparatorChar): /
Разделитель, который используется в переменных среды для разделения строк пути (PathSeparator): ;
Разделитель томов (VolumeSeparatorChar): :
Символы, запрещенные для использования в пути: |☺☻♥♦♣♠►◄↕‼¶§▬↨↑↓→∟↔▲▼
иммволы, запрещенные в именах файлов: «<>|☺☻♥♦♣♠►◄↕‼¶§▬↨↑↓→∟↔▲▼*?\/
Как в C# объединить несколько строк в путь?
Для объединения двух и более строк в путь можно использовать сразу два метода класса Path
— это Combine
и Join
. В отличие от метода Combine
, метод Join
не пытается получить корень возвращаемого пути. То есть, если любой из путей в paths
, за исключением последнего, является абсолютным путем, Join
метод не удаляет предыдущие пути, как это делается в методе Combine
. Сказанное можно продемонстрировать на следующем примере:
using System; using System.IO; namespace FileSystem { class Program { static void Main(string[] args) { try { ShowPathInformation("C:/", "users/user1/documents", "letters"); ShowPathInformation("D:/", "/users/user1/documents", "letters"); ShowPathInformation("D:/", "users/user1/documents", "C:/users/user1/documents/data"); } catch (Exception ex) { Console.WriteLine(ex.Message); } } private static void ShowPathInformation(string path1, string path2, string path3) { Console.WriteLine($"Результат объединения строк '{path1}', '{path2}', и '{path3}' в путь"); Console.WriteLine($" Path.Join: '{Path.Join(path1, path2, path3)}'"); Console.WriteLine($" Path.Combine: '{Path.Combine(path1, path2, path3)}'"); Console.WriteLine($" {Path.GetFullPath(Path.Join(path1, path2, path3))}"); } } }
Результат работы:
Path.Join: ‘C:/users/user1/documents\letters’
Path.Combine: ‘C:/users/user1/documents\letters’
C:\users\user1\documents\letters
Результат объединения строк ‘D:/’, ‘/users/user1/documents’, и ‘letters’ в путь
Path.Join: ‘D://users/user1/documents\letters’
Path.Combine: ‘/users/user1/documents\letters’
D:\users\user1\documents\letters
Результат объединения строк ‘D:/’, ‘users/user1/documents’, и ‘C:/users/user1/documents/data’ в путь
Path.Join: ‘D:/users/user1/documents\C:/users/user1/documents/data’
Path.Combine: ‘C:/users/user1/documents/data’
D:\users\user1\documents\C:\users\user1\documents\data
Обратите внимание на третий случай объединения строк в путь — при использовании Join
корень пути не был убран. Несмотря на такое поведение метода Join
, иногда бывает необходимым его использовать.
Как в C# получить и заменить расширение файла?
Для работы с расширениями файлов в строке пути в классе C# Path используются два метода — Get
и Change
.
try { string path = @"c:\CSharp\Files\test.txt"; Console.WriteLine($"Исходный путь: {path}"); Console.WriteLine($"Исходное расширение файла: {Path.GetExtension(path)}"); Console.WriteLine($"Путь с новым расширением файла: {Path.ChangeExtension(path, "pdf")}"); } catch (Exception ex) { Console.WriteLine(ex.Message); }
Результат:
Исходное расширение файла: .txt
Путь с новым расширением файла: c:\CSharp\Files\test.pdf
Обратите внимание, что метод GetExtension
возвращает расширение вместе с точкой, в то время как для изменения расширения файла в метод ChangeExtension
передается расширение без точки.
Как в C# получить имя файла из строки пути?
Для получения имени файла из строки пути в C# могут использоваться два метода класса Path
— этоGet
и Get
.
string fullPath = @"C:\Programms\Files\FileName.txt"; string shortPath = @"\Files\FileName.txt"; Console.WriteLine($"Имя файла: {Path.GetFileName(fullPath)}"); Console.WriteLine($"Имя файла: {Path.GetFileNameWithoutExtension(fullPath)}"); Console.WriteLine($"Имя файла из короткого пути: {Path.GetFileName(shortPath)}"); Console.WriteLine($"Имя файла из короткого пути: {Path.GetFileNameWithoutExtension(shortPath)}");
Результат:
Имя файла: FileName
Имя файла из короткого пути: FileName.txt
Имя файла из короткого пути: FileName
Как в C# создать временный файл?
Для создания временного файла в C# может использоваться метод класса Path
Get
Console.WriteLine($"Путь к временной папке текущего пользователя: {Path.GetTempPath()}"); Console.WriteLine("Создаем временный файл"); string tmp = Path.GetTempFileName(); Console.WriteLine($" Путь к временному файлу: {tmp}"); if (File.Exists(tmp)) Console.WriteLine("Временный файл найден по указанному пути"); else Console.WriteLine("Временный файл не найден по указанному пути");
Здесь мы создали временный файл во временном каталоге для текущего пользователя и проверили его существование с использованием метода File.Exists
. Результат работы программы:
Создаем временный файл
Путь к временному файлу: C:\Users\user\AppData\Local\Temp\tmpDB08.tmp
Временный файл найден по указанному пути
GetTempFileName
именно создает временный файл на диске и возвращает его путь. Итого
Сегодня мы разобрались с тем, как в C# устроена работа с путями. Все методы класса Path
являются кроссплатформенными, что позволяет использовать их одинаково как в Windows, так и в других операционных системах. Разобрали вопрос того как в C# создать временный файл, соединить несколько строк в путь, получить и изменить расширение файла.