Как получить полный путь к файлу c
Перейти к содержимому

Как получить полный путь к файлу c

  • автор:

 

Как получить полный путь к файлу c

Казалось бы — что может быть проще, чем работа с файлами в C++. Но отдельные личности поражают своей находчивостью в поиске наихудшего подхода.
Не стоит делать так:

How do I get the directory from a file's full path?

What is the simplest way to get the directory that a file is in? I’m using this to set a working directory.

In this example, I should get «C:\MyDirectory».

10 Answers 10

If you’ve definitely got an absolute path, use Path.GetDirectoryName(path) .

If you might only get a relative name, use new FileInfo(path).Directory.FullName .

Note that Path and FileInfo are both found in the namespace System.IO .

You can use System.IO.Path.GetDirectoryName(fileName) , or turn the path into a FileInfo using FileInfo.Directory .

If you’re doing other things with the path, the FileInfo class may have advantages.

Aurumaker72's user avatar

You can use Path.GetDirectoryName and just pass in the filename.

Brandon's user avatar

If you are working with a FileInfo object, then there is an easy way to extract a string representation of the directory’s full path via the DirectoryName property.

Description of the FileInfo.DirectoryName Property via MSDN:

Gets a string representing the directory’s full path.

Работа с файловой системой в C#. Работа с путями (класс Path)

Путь — это строка, представляющая расположение файла или каталога. При этом, путь не обязательно указывает на физическое расположение чего-либо на диске. Например, путь может быть сопоставлен с расположением в памяти или на другом устройстве. Точный формат пути определяется текущей операционной системой. Так, например, в Windows системах путь может начинаться с буквы диска или тома, а в других операционных системах этот элемент может отсутствовать. В C# работа с путями осуществляется с использованием класса Path из пространства имен System.IO .

Класс 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 Path Fully Qualified(String) — возвращает значение, которое показывает, является ли указанный путь к файлу фиксированным для определенного диска или UNC-пути
  • Метод Is Path Rooted(String) — возвращает значение, показывающее, содержит ли указанная строка пути корневую папку
  • Метод Join(String[]) — сцепляет массив путей в один путь
  • Метод Trim Ending Directory Separator(String) — обрезает один конечный разделитель каталогов за пределами корня указанного пути

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

Как в C# получить разделитель пути, запрещенные символы в путях и именах файлов?

Результат вывода консоли:

Как в C# объединить несколько строк в путь?

Для объединения двух и более строк в путь можно использовать сразу два метода класса Path — это Combine и Join . В отличие от метода Combine , метод Join не пытается получить корень возвращаемого пути. То есть, если любой из путей в paths , за исключением последнего, является абсолютным путем, Join метод не удаляет предыдущие пути, как это делается в методе Combine . Сказанное можно продемонстрировать на следующем примере:

 

Обратите внимание на третий случай объединения строк в путь — при использовании Join корень пути не был убран. Несмотря на такое поведение метода Join , иногда бывает необходимым его использовать.

Как в C# получить и заменить расширение файла?

Для работы с расширениями файлов в строке пути в классе C# Path используются два метода — Get Extension и Change Extension .

Обратите внимание, что метод GetExtension возвращает расширение вместе с точкой, в то время как для изменения расширения файла в метод ChangeExtension передается расширение без точки.

Как в C# получить имя файла из строки пути?

Для получения имени файла из строки пути в C# могут использоваться два метода класса Path — это Get File Name и Get File Name Without Extension .

Как в C# создать временный файл?

Для создания временного файла в C# может использоваться метод класса Path Get Temp File Name()

Здесь мы создали временный файл во временном каталоге для текущего пользователя и проверили его существование с использованием метода File.Exists . Результат работы программы:

Итого

Сегодня мы разобрались с тем, как в C# устроена работа с путями. Все методы класса Path являются кроссплатформенными, что позволяет использовать их одинаково как в Windows, так и в других операционных системах. Разобрали вопрос того как в C# создать временный файл, соединить несколько строк в путь, получить и изменить расширение файла.

Информация о файлах и каталогах

Классы File и Directory, которые мы использовали в предыдущих главах, отлично подходят для взаимодействия с папками или файлами напрямую. Тем не менее, иногда нам нужно просто получить информацию о них, и опять же, пространство имен System.IO приходит к нам на помощь: классы FileInfo и DirectoryInfo. В этой главе мы посмотрим на несколько способов использования этих двух классов.

Класс FileInfo

Для начала давайте разберемся с простым способом использования класса FileInfo.

Мы создаем новый экземпляр класса FileInfo. Он принимает один параметр — путь к файлу, информацию о котором нам нужно получить. Мы могли бы прописать туда путь к какому-то файлу, однако я подумал, что будет интересно получить информацию об исполняемом файле нашего приложения, над которым мы прямо сейчас работаем — EXE файл нашего проекта после компиляции. Так как мы не имеем доступа к классу Application из консольного приложения (потому что этот класс является частью сборки WinForms), мы используем немного рефлексии для получения пути к текущей сборке. Это выходит за рамки главы, зато вы теперь это знаете.

Теперь у нас есть экземпляр класса FileInfo, мы выведем всю информацию о нем. Попробуйте запустить приложение и вы это увидите. Все легко и просто, и если вы посмотрите на класс FileInfo, вы увидите, что он предлагает даже больше информации, а также ярлыки для методов из File — и почему бы и нет? В любом случае, у нас есть ссылка на файл с экземпляром FileInfo, поэтому мы можем получить те же параметры, что и в классе File.

Класс DirectoryInfo

Информация об одном файле это хорошо, но используя класс DirectoryInfo, мы можем получить информацию обо всех файлах и директориях внутри какой-то определенной директории, что очевидно часто используется в реальных задачах. Давайте я покажу вам простой пример:

Вместо FileInfo, создадим экземпляр DirectoryInfo. Мы используем тот же самый трюк для получения пути к нашему исполняемому файлу, а затем выполним метод GetDirectoryName() из класса Path, чтобы выделить из полного пути только путь к директории. Затем выполним метод GetFiles() для получения массива экземпляров класса FileInfo, каждый из которых представляем файл в директории. После чего переберем их, печатая имя и размер каждого файла.

А если мы захотим в добавок получить и список директорий? Это также легко:

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

Это выдаст нам все .ехе файлы в директории:

А это выдаст все папки, у которых в имени встречается слово «test»:

Мы даже можем получить и файлы и директории рекурсивно. Это означает, что поиск будет осуществляться и в поддиректориях поддиректории. исходной директории:

Следующим образом будет выглядеть код для поиска только в исходной директории:

Резюме

Мы можем легко получить информацию о файловой системе на нашем компьютере, используя классы FileInfo и DirectoryInfo.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *