У нас есть папка в Windows, которая... огромная. Я запустил "dir > list.txt". Команда потеряла ответ через 1,5 часа. Выходной файл составляет около 200 МБ. Он показывает, что по меньшей мере 2,8 миллиона файлов. Я знаю, что ситуация глупа, но позвольте сосредоточиться на самой проблеме. Если у меня есть такая папка, как я могу разбить ее на некоторые "управляемые" подпапки? Удивительно, но все решения, которые я придумал, включают в себя получение всех файлов в папке в какой-то момент, что в моем случае не имеет значения. Любые предложения?
Спасибо Киту Хилл и Мехрдаду. Я принял ответ Кейта, потому что именно то, что я хотел сделать, но я не мог быстро заставить PS работать быстро.
С советом Мехрдада я написал эту небольшую программу. Потребовалось 7 часов, чтобы переместить 2,8 миллиона файлов. Итак, начальная команда dir закончила. Но почему-то он не вернулся к консоли.
namespace SplitHugeFolder
{
class Program
{
static void Main(string[] args)
{
var destination = args[1];
if (!Directory.Exists(destination))
Directory.CreateDirectory(destination);
var di = new DirectoryInfo(args[0]);
var batchCount = int.Parse(args[2]);
int currentBatch = 0;
string targetFolder = GetNewSubfolder(destination);
foreach (var fileInfo in di.EnumerateFiles())
{
if (currentBatch == batchCount)
{
Console.WriteLine("New Batch...");
currentBatch = 0;
targetFolder = GetNewSubfolder(destination);
}
var source = fileInfo.FullName;
var target = Path.Combine(targetFolder, fileInfo.Name);
File.Move(source, target);
currentBatch++;
}
}
private static string GetNewSubfolder(string parent)
{
string newFolder;
do
{
newFolder = Path.Combine(parent, Path.GetRandomFileName());
} while (Directory.Exists(newFolder));
Directory.CreateDirectory(newFolder);
return newFolder;
}
}
}