В проекте на 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()
Комментариев нет:
Отправить комментарий