Mamy folder w systemie Windows, który jest ... ogromny. Uruchomiłem "dir> list.txt". Komenda straciła odpowiedź po 1,5 godziny. Plik wyjściowy ma około 200 MB. Pokazuje, że istnieje co najmniej 2,8 miliona plików. Wiem, że sytuacja jest głupia, ale skupmy się na samym problemie. Jeśli mam taki folder, w jaki sposób mogę go podzielić na "podrzędne foldery" z możliwością zarządzania? Zaskakujące jest to, że wszystkie rozwiązania, które wymyśliłem, polegają na pobieraniu wszystkich plików w folderze, co jest w moim przypadku nieuniknione. Jakieś sugestie?Jak podzielić duży folder?
Dziękuję Keithowi Hillowi i Mehrdadzie. Przyjąłem odpowiedź Keitha, ponieważ dokładnie to chciałem zrobić, ale nie mogłem szybko przekonać PS.
Z napiwkiem Mehrdada napisałem ten mały program. Przesłanie 2,8 miliona plików zajęło ponad 7 godzin. Tak więc pierwsza komenda dir zakończyła się. Ale jakoś nie wróciło do konsoli.
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;
}
}
}
Uh ... napisz własną implementację systemu NTFS i podziel go drzewo binarne "$ INDEX_ALLOCATION"? Miłej zabawy ... – Mehrdad
Nawiasem mówiąc, dlaczego nie możesz uzyskać listy wszystkich plików? Czy funkcja 'FindNextFile' zużywa tak dużo czasu/zasobów, czy jest to po prostu' dir', które to robi? – Mehrdad
@Mebrad, ponieważ jest zbyt wolny. FindNextFile wydaje się obiecujący. Spróbuję tego. –