C# Как устранить ограничения при использовании DirectoryInfo?

Когда я рекурсивно просматриваю некоторые папки и файлы, я сталкиваюсь с этой ошибкой:

Указанный путь, имя файла или оба слишком длинные. Полное имя файла должно быть меньше 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.

10
задан Community 23 May 2017 в 10:29
поделиться