#c# #asp.net
#c# #asp.net
Вопрос:
привет, я создаю приложение, и я хочу знать каждый файл, который присутствует в этой папке. т. Е. как я могу выполнить итерацию по корневому каталогу и получить список посещений каждого файла в списке один раз.
Ответ №1:
Если вам просто нужно перечислить их все сразу, вы можете просто использовать перегрузку для GetFiles, которая включает опцию.
string[] filePaths = Directory.GetFiles(@"c:MyDir", "*.*", SearchOption.AllDirectories);
Очевидно, что в веб-приложении у вас вряд ли был бы доступ к «c:MyDir «, то есть вы можете заменить это переменной, содержащей результаты вызова MapPath, вот так:
var rootDir = Server.MapPath("~/App_Data");
Ответ №2:
Используйте каталог.EnumerateFiles(строка, String, SearchOption) функционирует с SearchOption.AllDirectories
:
foreach (var file in Directory.EnumerateFiles(@"c:", "*.txt", SearchOption.AllDirectories))
{
// Do stuff here
}
Метод EnumerateFiles намного быстрее, чем метод GetFiles, поскольку он фактически просто возвращает перечислитель и фактически не обращается к файлам, пока они не станут красными.
Комментарии:
1. Возможно, в фреймворке было бы что-то, что сделало бы это за вас. Однако это возвращает только полный путь. Потребовалась бы дополнительная работа, если бы вы хотели получить объект, представляющий свойства файла.
Ответ №3:
Вы можете использовать классы DirectoryInfo и FileInfo, а также рекурсивную функцию.
void Main()
{
DirectoryInfo info = new DirectoryInfo(@"C:Personal");
ListContents(info);
}
public void ListContents(DirectoryInfo info)
{
foreach(var dir in info.GetDirectories())
{
ListContents(dir);
}
foreach(var file in info.GetFiles())
{
Console.WriteLine(file.FullName);
}
}