Я пытаюсь прочитать каталог с помощью C# и вернуть все имена папок в этом каталоге. Я не хочу, чтобы возвращались какие-либо вложенные папки или файлы, а только папки, находящиеся непосредственно в каталоге.
Я собираюсь использовать эти имена для создания боковой навигации в моем приложении. Пользователи будут иметь возможность создавать новые папки, поэтому я хочу, чтобы навигация создавалась динамически по мере создания новых папок с течением времени. До сих пор я пробовал разные решения.
1-й - я использовал Directory.GetFiles() и перебирал каталог, но это возвращает каждую отдельную папку и имя файла, найденные во всем каталоге.
2-й - я использовал Directory.GetDirectory() и попытался пройтись по каталогу, и это вернуло только имя папки, но только первую папку! Мне нужны остальные папки. Как будто моя петля не работает.
1-я попытка:
string [] files = Directory.GetFiles(@"\\\\SERVERNAME\\Data\\ServerLinks\\Safety\\","*",SearchOption.AllDirectories);
string File = "";
for (int ii = 0; ii < files.Length; ii++)
{
File += "|" + files[ii];
}
return (File);
2-я попытка:
string path = @"\\\\SERVERNAME\\Data\\ServerLinks\\Safety\\";
foreach (string folder in Directory.GetDirectories(path))
{
string name = folder.Remove(0, folder.LastIndexOf('\\') + 1);
return (name);
}
return ("");





Ваша вторая попытка в правильном направлении. Вы только что возвращаетесь к первой папке. Вместо этого вы должны сохранить все папки и вернуть коллекцию. Или просто сделайте возврат доходности, чтобы вернуться как IEnumerable
var allFolders = new List<string>();
string path = @"\\SERVERNAME\Data\ServerLinks\Safety\";
foreach (string folder in Directory.GetDirectories(path)) {
string name = folder.Remove(0, folder.LastIndexOf('\\') + 1);
allFolders.Add(name)
}
return allFolders;
На вашем месте я бы использовал немного другой код, который намного надежнее и идиоматичнее.
new DirectoryInfo(path).GetDirectories().Select(d => d.Name);
Вместо использования класса Directory и последующего манипулирования путями с использованием строковых функций вы можете хранить информацию как объект каталога с помощью new DirectoryInfo(path).GetDirectories(). Я только что сделал выбор на DirectoryInfo.Name, так как это то, что показывал ваш код, но у вас есть более мощный объект DirectoryInfo, доступный таким образом
Имеет смысл. Спасибо Вихрам!
Причина, по которой ваша вторая попытка возвращает только один элемент, заключается в том, что он возвращает изнутри петли. GetDirectories - правильный метод ... но используйте его так же, как и в первом методе.