Khi tôi đệ quy qua một số thư mục và tệp, tôi gặp phải lỗi này:C# Làm thế nào tôi có thể giải quyết các giới hạn khi sử dụng DirectoryInfo?
Đường dẫn được chỉ định, tên tệp hoặc cả hai quá dài. Tên tệp hoàn toàn đủ điều kiện phải nhỏ hơn 260 ký tự và đạo diễn phải ít hơn 248 ký tự.
Dưới đây là chức năng của tôi
private void ProcessDirectory(DirectoryInfo di)
{
try
{
DirectoryInfo[] diArr = di.GetDirectories();
foreach (DirectoryInfo directoryInfo in diArr)
{
if (StopCheck)
return;
ProcessDirectory(directoryInfo);
}
ProcessFile(di);
}
catch (Exception e)
{
listBoxError.Items.Add(e.Message);
}
TextBoxCurrentFolder.Text = di.ToString();
}
Tôi không thể làm cho tên thư mục ngắn hơn, vì tôi không được phép quá như vậy ... Làm thế nào tôi có thể giải quyết vấn đề này?
Added: Dưới đây là các chức năng khác:
private void ProcessFile(DirectoryInfo di)
{
try
{
FileInfo[] fileInfo = di.GetFiles();
if (fileInfo.LongLength != 0)
{
foreach (FileInfo info in fileInfo)
{
Size += info.Length;
CountFile++;
}
}
}
catch (Exception e)
{
listBoxError.Items.Add(e.Message);
}
}
EDIT Tìm thấy này, nơi ông sử dụng Zeta Paths Long: How can I use FileInfo class, avoiding PathTooLongException?
đã thực hiện nó và bây giờ tôi sẽ để chương trình chạy qua đêm để xem chương trình có hoạt động hay không.
EDIT Đã sử dụng ZetaLongPath hôm qua và nó hoạt động tốt! Nó thậm chí đã đi qua các thư mục cần quyền truy cập.
EDIT Thay vì zetalongPath, tôi đã sử dụng Delimon.Win32.IO.dll mà tôi nghĩ là tốt hơn nhiều. Nó có cùng giao diện với Win32.
Tôi đoán bạn phải quay trở lại vào Windows API đơn giản (FindFirst */FindNext *) –
Vì vậy, hiện các lỗi xảy ra từ trong 'ProcessFile()', có lẽ mã mà có thể được thay đổi nếu chúng ta có thể nhìn thấy nó? – musefan
Bạn biết rằng bạn là người đầu tiên đến thư mục con sâu nhất trước khi bạn bắt đầu xử lý các tệp ?! Nếu bạn muốn bắt đầu với thư mục gốc, bạn nên di chuyển 'ProcessFile (di);' vào đầu của phương thức. –