如何通过使用 C# 的 Web 方法遍历目录和仅 return 文件夹名称?
How to loop through directory and only return folder names through a web method using C#?
我正在尝试使用 C# 读取一个目录,return 该目录中的所有文件夹名称。我不想 return 编辑任何嵌套文件夹或文件,只希望目录中的直接文件夹。
我将使用这些名称在我的应用程序中构建侧边导航。用户将能够创建新文件夹,因此我希望导航随着时间的推移随着新文件夹的创建而动态构建。到目前为止,我已经尝试过不同的解决方案。
1st - 我使用 Directory.GetFiles()
并遍历目录,但是 return 是在整个目录中找到的每个文件夹和文件名。
2nd - 我使用 Directory.GetDirectory()
并尝试遍历目录,这 return 只是文件夹名称,但只有第一个文件夹!我需要剩余的文件夹。就像我的循环不工作一样。
第一次尝试:
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 ("");
你的第二次尝试方向正确。您只是 return 在第一个文件夹上。相反,您应该存储所有文件夹和 return 集合。或者只是做一个 yield return to 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
class 然后使用字符串函数进行路径操作,您可以使用 new DirectoryInfo(path).GetDirectories()
将信息保存为目录对象。我刚刚在 DirectoryInfo.Name
上做了一个 select,因为这就是您的代码所显示的内容,但是您可以通过这种方式获得更强大的 DirectoryInfo
对象
我正在尝试使用 C# 读取一个目录,return 该目录中的所有文件夹名称。我不想 return 编辑任何嵌套文件夹或文件,只希望目录中的直接文件夹。
我将使用这些名称在我的应用程序中构建侧边导航。用户将能够创建新文件夹,因此我希望导航随着时间的推移随着新文件夹的创建而动态构建。到目前为止,我已经尝试过不同的解决方案。
1st - 我使用 Directory.GetFiles()
并遍历目录,但是 return 是在整个目录中找到的每个文件夹和文件名。
2nd - 我使用 Directory.GetDirectory()
并尝试遍历目录,这 return 只是文件夹名称,但只有第一个文件夹!我需要剩余的文件夹。就像我的循环不工作一样。
第一次尝试:
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 ("");
你的第二次尝试方向正确。您只是 return 在第一个文件夹上。相反,您应该存储所有文件夹和 return 集合。或者只是做一个 yield return to 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
class 然后使用字符串函数进行路径操作,您可以使用 new DirectoryInfo(path).GetDirectories()
将信息保存为目录对象。我刚刚在 DirectoryInfo.Name
上做了一个 select,因为这就是您的代码所显示的内容,但是您可以通过这种方式获得更强大的 DirectoryInfo
对象