可以说我有一个文件夹,并且我想以随机顺序将它们全部在每个随机秒内复制(可以说1秒到1小时之间的随机 - >这是可能的吗?)。我知道File.Copy("from", "to");
你可以复制文件。但我需要这个随机的东西。有任何想法吗?如何以随机顺序和随机时间复制文件?
回答
阅读文件到列表,并在副本中循环使用该
然后洗牌只是睡一个随机毫秒从1000到3600000
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("dirctory path");
List<System.IO.FileInfo> files = di.GetFiles().ToList();
di = null; // at this point I don't think you need to hold on to di
// the static Directory will return string file names
// randomize files using the code in the link
Random random = new Random();
foreach (System.IO.FileInfo fi in files)
{
Thread.Sleep(random.Next(1000, 3600000));
// should probaly test the fi is still valid
fi.CopyTo("desitination");
}
获取所有文件名到数组中,从数组中选取一个随机字符串,使用它获取文件。
使用具有随机整数的计时器。如果你不知道如何使用随机数,那么它只是与rand.Next(10)
,这将返回0和9之间的随机整数。
查找System.Random
类。您可以使用它来生成1到3600之间的整数,3600是一小时内的秒数。
要随机化文件名,请将它们放在数组中,然后按r.Next()
对数组进行排序,其中r
是您之前创建的System.Random
的实例。
这应该工作:
Random random = new Random();
int seconds = random.Next(3600) + 1;
List<FileInfo> files = new DirectoryInfo(Environment.CurrentDirectory).GetFiles().ToList();
Timer timer = new Timer() { Interval = seconds * 1000, AutoReset = true };
timer.Elapsed += (s, e) =>
{
files = files.OrderBy(f => random.NextDouble()).ToList();
foreach(FileInfo file in files)
{
try { file.CopyTo("SomeDestination"); }
catch { Console.WriteLine("Error copying file " + file); }
}
};
timer.Start();
试试这个
Timer t = new Timer();
t.Interval = 1;
t.Enabled = true;
t.Tick += (s, o) =>
{
// interval between 1000ms(1s) & 1H
t.Interval =1000*(new Random().Next(3600));
string[] still_files ;
do
{
still_files = Directory.GetFiles(@"c:\source").Select(X => Path.GetFileName(X))
.Except(Directory.GetFiles(@"c:\destination").Select(X => Path.GetFileName(X)))
.ToArray();
File.Copy(Path.Combine(@"c:\source", still_files[new Random().Next(still_files.Count()) - 1]), @"c:\destination");
} while (still_files.Count> 0);
};
这是可能的。最幼稚的做法可能是这样的:
static void Main(string[] args)
{
var files = Directory.GetFiles(@"c:\temp");
var dest = @"c:\temp2";
var rnd = new Random();
int maxDelay = 60; // one minute
var schedule = files.Select(f => new {FilePath = f, Delay = rnd.Next(maxDelay)}).ToList();
schedule.Sort((a,b) => a.Delay-b.Delay);
var startTime = DateTime.Now;
foreach (var s in schedule)
{
int curDelay = (int) (DateTime.Now - startTime).TotalSeconds;
if (s.Delay <= curDelay) File.Copy(s.FilePath, Path.Combine(dest, Path.GetFileName(s.FilePath)));
else {
Thread.Sleep((s.Delay-curDelay)*1000);
File.Copy(s.FilePath, Path.Combine(dest, Path.GetFileName(s.FilePath)));
}
}
}
这样 - 让我们创建的文件列表。然后分配随机延迟。然后按延迟值对它们进行排序。然后通过复制文件的列表,如果时间到了或睡觉,直到下一次复制时间。
循环完成后,所有文件都在大约延迟时间被复制。
curDelay是累积的不在之间。如果一个文件不符合延迟,那么它根本就不会被复制。它小睡一秒钟,然后进入下一个。 – Paparazzi
而如果延迟满足再有就是对下一个文件 – Paparazzi
curDelay零延迟不会“累积”,这是绝对的。因为文件延迟。没有零延迟。它将所有内容复制的延迟已经来了,然后根据需要为下一份复印件会睡之多。好吧,现在有一个流程 - 它应该重新尝试文件复制。更新。 – aiodintsov
- 1. SQL随机并按顺序复制?
- 2. PowerShell复制随机文件
- 3. 创建随机文件夹,复制到随机文件夹
- 4. 半随机顺序
- 5. Mongoose随机文件非顺序
- 6. 随机书写顺序输出文件?
- 7. 过程控制器以随机顺序运行文件
- 8. 以排序顺序生成随机数
- 9. 随机时间的随机消息
- 10. cf9 orm entityload随机顺序
- 11. 数字是随机顺序
- 12. 行的随机顺序Matlab
- 13. 获取随机顺序Laravel
- 14. Python的随机顺序OrderedDict
- 15. Laravel:获取随机顺序
- 16. 按钮的随机顺序
- 17. 随机化行的顺序
- 18. IEnumerator的随机化顺序
- 19. RAND没有随机顺序的限制
- 20. 复制随机文件夹很快
- 21. 将文件复制到随机目录?
- 22. 在Rails中,随机事件发生在随机时间随机事件的随机事件
- 23. 如何在Nodejs中以随机时间间隔创建随机对象?
- 24. 如何随机化图像的顺序?
- 25. 如何按顺序组织随机值?
- 26. Python。以随机顺序显示项目
- 27. 以随机顺序比较字符串
- 28. 以随机顺序显示<iframe>
- 29. 以随机顺序显示屏幕对
- 30. iTextSharp以随机顺序排列的Acofields
你的意思是,你也是以随机顺序复制文件的一部分,或者你应该随机复制整个文件? – Patrick
我知道我们并不是想回答问题,但可以分享为什么要这样吗? – Paparazzi
@Patrick每x秒复制文件夹中的所有文件。假设文件夹中有文件A,B,C,D,因此将它们全部在第二个x BUT中随机拷贝,所以并不总是A然后B然后C然后D它应该是随机的。 – silla