Содержание
Путь — это строка, представляющая расположение файла или каталога. При этом, путь не обязательно указывает на физическое расположение чего-либо на диске. Например, путь может быть сопоставлен с расположением в памяти или на другом устройстве. Точный формат пути определяется текущей операционной системой. Так, например, в 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# создать временный файл, соединить несколько строк в путь, получить и изменить расширение файла.