Страницы

Поиск по вопросам

понедельник, 12 ноября 2018 г.

Как получить путь относительно базового каталога в C#?

В проекте на WinForms имеется набор отчетов, расположенных в папке и её подпапках, например:
D:\Shared\Common\BaseReports\Main.rpt D:\Shared\Common\BaseReports\Main_new.rpt D:\Shared\Common\BaseReports\2015\Payments.rpt D:\Shared\Common\BaseReports\2016\Payments.rpt
и т.д. Само приложение может располагаться где угодно, а путь к отчетам в нём указывается через переменную string reportPath = "D:\\Shared\\Common\\BaseReports";
В дальнейшем пусть путь к конкретному отчету задается с использованием базовой папки, например, так: string someReport = reportPath + "\\2015\\Payment.rpt";
Как получить список папок и файлов, находящихся внутри D:\Shared\Common\BaseReports\ в виде:
Main.rpt Main_new.rpt 2015\Payments.rpt 2016\Payments.rpt
... ?
Да, про string.Replace() [string relativePath = someReport.Replace(reportPath, "");] знаю, но может быть есть способ лучше? Спасибо!


Ответ

Как то так.
var baseDir = new DirectoryInfo("H:\\...\\Reports"); foreach(var file in baseDir.EnumerateFiles("*.rpt",SearchOption.AllDirectories)) { Console.WriteLine(file.FullName.Replace(baseDir.FullName + Path.DirectorySeparatorChar, string.Empty)); }
Работает с любой глубиной вложенных папок. Минимум должен быть доступ на чтение для файлов и папок, в противном случае будет исключение, но если это пользовательская папка и программа может писать туда отчеты с правами пользователя, то проблем с доступом быть не должно (диверсия пользователя не в счет). Выводит правильные системные слеши в путях. Работает быстрее чем с использованием Directory.GetFiles()

Комментариев нет:

Отправить комментарий