C# GetDirectory-仅从目录中检索几个文件夹
刚接触c#和ASP.net,我正在努力检索目录,并且已经这样做了C# GetDirectory-仅从目录中检索几个文件夹,c#,asp.net,C#,Asp.net,刚接触c#和ASP.net,我正在努力检索目录,并且已经这样做了 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ListItem item; ListItem item string folderLocat
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ListItem item;
ListItem item
string folderLocation = @"\\serv5007i\TeamCityDeploy\Trunk Production Build\Current\bin\Runtime";
int startSize = folderLocation.Length+1;
string[] fileNames = Directory.GetDirectories(folderLocation);
foreach (string fileName in fileNames)
{
item = new ListItem();
item.Value = item.Text = "Add " + fileName.Substring(startSize);
CheckBoxList1.Items.Add(item);
CheckBoxList2.Items.Add(item);
CheckBoxList3.Items.Add(item);
}
}
}
}
因此,我将输出作为大约15个文件夹的目录。是否可以在另一个分区中只返回10,然后返回5
因此,基本上我有15个文件夹被返回,但我需要有一个不同的标题下的其他底部5。如果我不清楚,我道歉。初学者 您可以控制输出,当您执行
Directory.GetDirectories
时,您将收到一个集合。我相信在这个例子中,您将收到一个字符串数组。这可以按照您的意愿进行操作:
循环示例:
这些方法的缺点是,您正在为起始位置或结束位置操作一个整数。这会在代码中造成混乱。另一种方法是Linq,它在迭代方面与上述方法类似,但会使代码更具表现力 Linq示例: 你也可以这样做:
var filter = Directory.EnumerateDirectories(path)
.Where(directory => directory.Name.Contains("Sample"))
.Take(10);
因此,初始行将自动枚举所提供路径中的目录,您根据名称进行筛选,然后取前十个
你可以用很多不同的方法来解决这个问题,这就是为什么缩小范围会更有帮助
“不要向精灵寻求忠告,因为他们会说不和是。”
更新: 完整的Linq示例可以是以下两种方法之一:
var directories = Directory.GetDirectories(path);
var filtered = directories.Skip(5);
或者你可以在一行中完成
var filtered = Directory.EnumerateDirectories(path).Skip(5).Take(5);
您可以使用for循环或counter将其限制为10或5。您到底想做什么,按某种约定筛选目录,还是干脆忽略特定的目录?你能给我们更多的信息吗。现在这个例子太宽泛了。使用Linq(如果你是C语言新手,你必须学习Linq!)。要获取前10个目录,可以使用
var fileNames=Directory.EnumerateDirectories(“”)。获取(10)
。要获取目录11到15,可以使用目录.枚举目录(“”).Skip(10).Take(5)
。我希望代码是非常自解释的——Linq倾向于使代码易于阅读:)如果解释太宽泛,那就抱歉了。上面返回了我的15个文件夹。(标题是ABC)我需要返回前十个,所以标题ABC在上面。然后返回带有标题(DEF)的11-14(如果有意义)。感谢你的耐心:汉克斯·格雷格,林克的例子,我不确定我会把这些台词放在哪里。它在foreach循环中吗?我已经设法得到了10个框,但是文件夹的名称没有出现;对于(int index=10;indexDirectoryInfo
。@conye9980实际上正在替换循环。我会更新给你看。
while(index != directories)
{
index++;
// Perform action until equal.
}
var filtered = directories.Take(10); // Take the first ten.
var filtered = directories.Skip(5); // Skip the first five.
var filtered = directories.Where(path => new DirectoryInfo(path).Name.Contains("Name")); // If directory names contain, return on that.
var filter = Directory.EnumerateDirectories(path)
.Where(directory => directory.Name.Contains("Sample"))
.Take(10);
var directories = Directory.GetDirectories(path);
var filtered = directories.Skip(5);
var filtered = Directory.EnumerateDirectories(path).Skip(5).Take(5);