【问题标题】:Select random file from folder从文件夹中选择随机文件
【发布时间】:2014-07-29 15:57:24
【问题描述】:

我的文件夹包含超过 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.
    }

  }
}            

有没有办法做到这一点。

【问题讨论】:

  • 你不要在任何地方使用随机数,只需选择一个介于 0 和 GetFiles().Count - 1... 之间的随机数...(不需要 foreach)
  • 我搜索并找到了该链接,但它选择了所有文件。不重复。

标签: c# asp.net file file-io directory


【解决方案1】:

为此,您需要随机化文件的排序顺序。

使用in this answer 显示的排序(如果需要,您也可以使用更加密的方法)

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

然后您可以在您的foreach 中评估files。它应该以随机顺序给出您要处理的文件数。

【讨论】:

  • 您可以通过使用GetFiles("*.zip")的扩展版本删除.where
  • 另外,要创建一个包含所有文件名的字符串a,请使用string.Join,而不是循环,例如string a = string.Join("\r\n", files.Select(x =&gt; x.FullName));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 2017-03-10
  • 1970-01-01
相关资源
最近更新 更多