2011-10-18 248 views
1

对于用于测试一些复制场景的测试套件,我编写了一个FileAccesser。这应该访问给定目录中的随机文件(在随机子目录中)以及删除,创建,重命名和更改文件或/和内容。我正在寻找一种方法来访问随机子目录中的随机文件。有什么建议么?访问C中随机目录中的随机文件#

我的解决方案,使所有子目录中的所有文件的列表:

var _Directory = new DirectoryInfo(args[1]); 
var _Files = _Directory.GetFiles("*", SearchOption.AllDirectories); 

现在我可以访问一个随机文件与

Random _Random = new Random(); 
var _RandomFile = _Files.ElementAt(_Random.Next(_Files.Count())); 

THX对您有所帮助。

+2

如何使用'Directory.GetFiles'列出所有文件,然后选择一个随机的文件? – CodesInChaos

+0

Directory.GetFiles返回给定目录中的文件列表。我需要一个递归的GetFiles函数 – kockiren

+3

然后你可以自己实现递归或者使用'SearchOption.AllDirectories'作为第三个参数。 – CodesInChaos

回答

2

你可以这样做:

  • 创建所有的目录列表(如字符串列表)
  • 对于每个目录在其中创建文件的列表。
  • 使用随机生成器生成一个介于0和dir count列表之间的数字。
  • 根据上面生成的数字作为索引,从列表中选择目录。
  • 应用最后2步为上述选定的目录选择一个随机文件。
+0

Thx为你的答案,目录就像一棵树,有很多子目录和大约10个关卡。我可以序列化所有子目录中的文件吗? – kockiren

+0

是的,你可以使用递归函数遍历整个树。 – Ankur

+0

如果我这样做,我会生成一个完整路径的平面列表 –

4

我想我明白你想要做什么,但使用随机性进行测试似乎是在这里做错了事情。

我希望我没有教任何人在这里吸鸡蛋,但测试应该是可重复和可测量的。如果任何测试失败,您需要能够逐步查明错误并纠正错误。

如果您可以在一个目录中修改文件的属性和内容,那么只要测试的所有参数都相同,您应该可以在任何目录中执行此操作。如果测试参数发生变化,则测试范围增加(例如,对目录或文件的权限使其成为只读)。

+1

+1为可重复和可测量。所以该死的权利... –

+0

Thx为您的答案,你是对的。对于我使用单独步骤构建方案的复制测试。但是现在我想测试复制时间并且在生产系统中,一些用户访问随机文件并自己更改内容或文件。我现在想要做的是同步两台服务器(使用NTP)并启动主服务器上的randomaccesser(这会记录我一个CSV:时间戳;服务器名;文件;方法;文件大小),复制监视器是一个文件观察器也CSV时间戳;服务器名称;文件;方法,文件大小,比我可以检查时间戳,看看会发生什么 – kockiren

1
  • 创建一个字符串列表,每个字符串代表一个文件路径(目录\ FILENAME.EXT)
  • 生成随机数0 - 字符串-1
  • 的长度获取基于随机numnber指数
+0

thx为您的帮助,我的编辑解决方案工作正常 – kockiren