2014-06-09 62 views
3

我的文件夹包含超过100个zip文件。我想从文件夹中选择随机6 zip文件。从文件夹中选择随机文件

我尝试:

 DirectoryInfo test= new DirectoryInfo(@"C:\test").GetFiles(); 
     foreach (FileInfo file in test.GetFiles()) 
     { 

      Random R = new Random(); //try to apply random logic but fail. 

      if (file.Extension == ".zip") 
      { 
       string a=""; 
       for (int ListTemplate = 0; ListTemplate < 6; ListTemplate++) 
       { 
        a += file.FullName; //Want to choose random 6 files. 
       } 

      } 
     } 

有什么办法来帮忙做this.Thanks。

+0

可能重复的[从目录中选择随机文件](http://stackoverflow.com/questions/742685/select-random-file-from-directory) – Stasel

+0

你不随意使用随机,随便选一个随机0和'GetFiles()。Count - 1'之间的数字...(不需要foreach) – Sayse

+0

我搜索并找到该链接,但它选择了所有文件。不重复。 –

回答

2

要做到这一点,你要随机将这些文件被排序的顺序。

使用所示in this answer排序(如果你愿意,你可以使用更多的加密方式也一样)

var rnd = new System.Random(); 
var files = Directory.GetFiles(pathToDirectory, "*.zip") 
        .OrderBy(x => rnd.Next()) 
        .Take(numOfFilesThatYouWant); 

然后,您可以评估你的foreachfiles。它应该以随机顺序给出您想要处理的文件的数量。

+0

您可以通过使用['GetFiles(“* .zip”)']的扩展版本来移除'.where'(http://msdn.microsoft.com/zh-cn/library/8he88b63(v = vs。 110).aspx) – Sayse

+0

@Sayse很好的电话。答案已更新 –

+0

此外,要创建一个包含所有文件名的字符串'a',请使用'string.Join',而不是一个循环,例如'string a = string.Join(“\ r \ n”,files.Select x => x.FullName));'。 –