Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetDirectory-仅从目录中检索几个文件夹_C#_Asp.net - Fatal编程技术网

C# GetDirectory-仅从目录中检索几个文件夹

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

刚接触c#和ASP.net,我正在努力检索目录,并且已经这样做了

{
    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);