GetDirectories - 仅从目录中检索几个文件夹

时间:2016-12-19 17:01:33

标签: 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 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个左右文件夹的目录。是否可以在另一个div中返回10而后5。

所以基本上我有15个文件夹被返回,但我需要将底部5放在与其他文件不同的标题下。如果我不清楚,我道歉。初学者!

1 个答案:

答案 0 :(得分:3)

您可以控制输出,当您执行Directory.GetDirectories时,您将收到一个集合。我相信在这个例子中,你会收到一个字符串数组。这可以根据需要进行操作:

循环示例:

foreach(string directory in directories)
{
     // Enumerate over all items within the collection.
}
for(int index = 0; index < directories.Length; index++)
{
   // Will enumerate until index == directories
   // If you make index five, it would start at position six of the array.
   // since they're zero based.  But you can manipulate how you want.
}
do
{
     index++
     // Perform an action. Based on the while.
}

while(index != directories.Length);
while(index != directories)
{
     index++;
     // Perform action until equal.
}

这些方法的缺点是,你是在操纵起始位置或结束位置的整数。这可能会在代码中造成混淆。另一种方法是Linq,类似于上面的迭代,但会使代码更具表现力。

Linq示例:

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

因此,初始行将自动枚举提供的路径中的目录,您根据名称进行过滤,然后取前十。

你可以通过很多不同的方式解决这个问题,这就是为什么缩小它会更有帮助。

  

“不要向精灵求助,因为他们会说不,是的。”

<强>更新

完整的Linq示例将是以下两种方法之一:

var directories = Directory.GetDirectories(path);
var filtered = directories.Skip(5);

或者你可以在一行中完成。

var filtered = Directory.EnumerateDirectories(path).Skip(5).Take(5);