2014-06-09 97 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));'。 –