我正在尝试使用C#读取目录并返回该目录中的所有文件夹名称。我不希望返回任何嵌套的文件夹或文件,而只返回目录中的直接文件夹。
我将使用这些名称在应用程序中构建侧面导航。用户将具有创建新文件夹的能力,因此我希望随着时间的推移创建新文件夹时可以动态构建导航。到目前为止,我已经尝试了不同的解决方案。
第一-我使用Directory.GetFiles()
并遍历目录,但这返回了整个目录中找到的每个文件夹和文件名。
2nd-我使用Directory.GetDirectory()
并尝试遍历目录,这确实只返回文件夹名称,但仅返回第一个文件夹!我需要其余的文件夹。就像我的循环无法正常工作。
第一次尝试:
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);
第二次尝试:
string path = @"\\\\SERVERNAME\\Data\\ServerLinks\\Safety\\";
foreach (string folder in Directory.GetDirectories(path))
{
string name = folder.Remove(0, folder.LastIndexOf('\\') + 1);
return (name);
}
return ("");
答案 0 :(得分:2)
您的第二次尝试方向正确。您只返回第一个文件夹。相反,您应该存储所有文件夹并返回集合。或者只是执行收益率回报以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
将信息保留为Directory对象,而不是使用new DirectoryInfo(path).GetDirectories()
类,然后使用字符串函数进行路径操作。我刚刚在DirectoryInfo.Name
上进行了选择,因为这就是您的代码所显示的内容,但是您可以通过这种方式使用更强大的DirectoryInfo
对象