Когда я рекурсивно просматриваю некоторые папки и файлы, я сталкиваюсь с этой ошибкой:
Указанный путь, имя файла или оба слишком длинные. Полное имя файла должно быть меньше 260 символов, а имя каталога должно быть меньше 248 символов.
Вот моя функция
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();
}
Я не могу сделать имена каталогов короче, потому что мне тоже нельзя, так что... Как мне решить эту проблему?
Добавлено: Вот еще одна функция:
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);
}
}
РЕДАКТИРОВАТЬ Нашел это, где он использовал Zeta Long Paths: Как я могу использовать класс FileInfo, избегая PathTooLongException?
Я реализовал его, и теперь я собираюсь запустить программу на ночь, чтобы посмотреть, работает ли она.
РЕДАКТИРОВАТЬ Вчера использовал ZetaLongPath, и он отлично сработал! Он даже прошел через папки, которым требовался доступ с разрешениями.
РЕДАКТИРОВАТЬ Вместо zetalongPath я использовал Delimon.Win32.IO.dll, который, как мне кажется, намного лучше. Он имеет те же интерфейсы, что и Win32.