可以說我有一個文件夾,並且我想以隨機順序將它們全部在每個隨機秒內複製(可以說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