【发布时间】:2019-06-24 07:11:59
【问题描述】:
我有一个小问题要解决。我有一个包含很多文件的文件夹。我希望它以这样一种方式将它隔离到子文件夹中,即每个子文件夹都包含一定数量的文件。例如。我有 1500 个文件,我想将它移到 15 个子文件夹中(每个文件夹中有 100 个文件)。子文件夹的名称是 wahtever 这不是问题。我不知道如何使用数组来移动它,我不知道。
我从该文件夹中读取了一个文件列表并创建了一个这样的数组:
string path = @"E:\test_folder";
string path2 = @"E:\test_folder\1";
string[] files_array = Directory.GetFiles(path);
然后我可以像这样移动文件:
foreach (file in files_array){
File.Move(System.IO.Path.Combine(path, file), System.IO.Path.Combine(path2, file));
}
但是我如何自动创建文件夹并仅移动一定数量的文件然后创建新文件夹等。我尝试这样做,但是我必须刷新我的数组,所以我认为这不是一个好主意。
while (files_array.Lenght > 0){
foreach (file in files_array.Take(50)){
File.Move(System.IO.Path.Combine(path, file), System.IO.Path.Combine(path2, file));
}
string[] files_array = Directory.GetFiles(path);}
我还考虑将所有数组写入 txt 临时文件,然后逐行读取并移动文件(这样我就不必刷新数组),但我不知道该怎么做。 最好的解决方案是什么?
【问题讨论】:
-
你熟悉
Take。你熟悉Skip吗?Take50.Skip0. 下一次迭代,Take50.Skip50. 等等。 -
@DanielMann,这不是无效吗?
-
@vasily.sib:你可以缓存它。对 1500 个项目的性能影响很小
-
@Stefan,您能否说明一下您所说的 “缓存” 是什么意思。对于 1500 个项目,您将拥有 30 批 50 个项目和 22 500 个无意义的迭代项目。
-
这将在 400 毫秒内执行 - 让我们稍等一下:与文件的移动相比,这是一个非常小的操作