Когда я рекурсивно просматриваю некоторые папки и файлы, я сталкиваюсь с этой ошибкой:
Указанный путь, имя файла или оба слишком длинные. Полное имя файла должно быть меньше 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: Как я могу использовать класс FileInfo, избегая исключения PathTooLongException?
Реализовали его, и теперь я позволю программе работать на ночь, чтобы посмотреть, работает ли она.
РЕДАКТИРОВАТЬ Вчера использовал ZetaLongPath, и он отлично поработал! Он даже прошел через папки, которым требовалось разрешение.
РЕДАКТИРОВАТЬ. Вместо zetalongPath я использовал Delimon.Win32.IO.dll, который, на мой взгляд, намного лучше. Он имеет те же интерфейсы, что и Win32.
ProcessFile()
, может быть, этот код можно изменить, если мы его увидим? - person musefan   schedule 06.03.2012ProcessFile(di);
в начало метода. - person Tim Schmelter   schedule 06.03.2012