Chúng tôi có một thư mục trên Windows ... rất lớn. Tôi chạy "dir> list.txt". Lệnh bị mất phản hồi sau 1,5 giờ. Các tập tin đầu ra là khoảng 200 MB. Nó cho thấy có ít nhất 2,8 triệu tập tin. Tôi biết tình hình là ngu ngốc nhưng chúng ta hãy tập trung vấn đề chính nó. Nếu tôi có một thư mục như vậy, làm thế nào tôi có thể chia nó thành một số thư mục con "có thể quản lý"? Đáng ngạc nhiên là tất cả các giải pháp tôi đã đưa ra với tất cả liên quan đến việc nhận được tất cả các tập tin trong thư mục tại một số điểm, đó là một không-không có trong trường hợp của tôi. Bất kỳ đề xuất?Cách tách một thư mục lớn?
Cảm ơn Keith Hill và Mehrdad. Tôi chấp nhận câu trả lời của Keith vì đó là chính xác những gì tôi muốn làm nhưng tôi không thể làm cho PS hoạt động một cách nhanh chóng.
Với mẹo của Mehrdad, tôi đã viết chương trình nhỏ này. Mất hơn 7 giờ để di chuyển 2,8 triệu tệp. Vì vậy, lệnh dir ban đầu đã kết thúc. Nhưng bằng cách nào đó nó đã không trở lại giao diện điều khiển.
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 ... hãy viết bản triển khai NTFS của riêng bạn và chia nó thành cây tìm kiếm nhị phân '$ INDEX_ALLOCATION'? Mặc dù vui vẻ ... – Mehrdad
Nhân tiện, tại sao bạn không thể có danh sách tất cả các tệp? Hàm 'FindNextFile' có tốn quá nhiều thời gian/tài nguyên hay chỉ là' dir' thực hiện điều đó? – Mehrdad
@Mehrdad, bởi vì nó quá chậm. FindNextFile có vẻ đầy hứa hẹn. Sẽ thử điều đó. –