Удаление слишком длинного пути из папки с общим доступом

Я пытаюсь удалить папки в общей папке в сети, используя C#. Некоторые из путей к папкам слишком длинные для обработки Windows. Я пробовал несколько вариантов для этого. Лучшее, что я нашел, это создание FileSystemObject, добавление \\?\ К пути и вызов DeleteFolder на пути, который я хочу удалить, который работает на моем локальном компьютере для слишком длинных путей, потому что я сопоставил диски, такие как C: и G: и т. д., но когда я пытаюсь использовать его в общей сетевой папке, я получаю либо HRESULT: 0x800A004C (CTL_E_PATHNOTFOUND), либо значение не попадает в ожидаемый диапазон.

Вот мой код:

private static void DeletePathWithLongFileNames(string path)
    {
        string tmpPath = @"\\?\" + path;
        FileSystemObject fso = new FileSystemObject();
        fso.DeleteFolder(tmpPath, true);
    }

скажем, например, папка network + share - это \\myServer\mySharedFolder\folder1\etc\etc, которая будет строкой пути, которую я отправляю своей функции удаления, тогда tmpPath отображается как "\\\\?\\\\\\ MYSERVER \\mySharedFolder\\folder1\\ \\ и т.д. и т.п."

Я не знаю много о UNC, поэтому я не знаю, что это не так или нет. Я почти уверен, что с моей переменной tmpPath что-то не так, но опять же я не уверен. Может быть, это синтаксическая ошибка, но я не могу на всю жизнь понять, что не так. Заранее спасибо за помощь

РЕДАКТИРОВАТЬ: Я считаю, что я нашел ответ, я проверяю его прямо сейчас. Пока это сработало для меня. если я запускаю метод DeleteFolder по следующему пути \\?\UNC\server\sharedFolder\folder1\etc\etc", это похоже на работу. Теперь мне просто нужно выяснить, как избавиться от всех этих лишних слешей.

РЕДАКТИРОВАТЬ 2: Это работает, проверил его в папке общего доступа в сети. Это просто дошло до меня, не понимая пути UNC.

0 ответов

Безопасный способ удалить слишком длинные пути - использовать AlphaFS. AlphaFS - это библиотека.NET, предоставляющая более полную функциональность файловой системы Win32 для платформы.NET, чем стандартные классы System.IO. Наиболее заметным недостатком стандартного.NET System.IO является отсутствие поддержки расширенных функций NTFS, в частности, поддержка расширенных путей длины (например, пути к файлам / каталогам длиннее 260 символов).

См. Удаление каталога: http://alphafs.alphaleonis.com/doc/2.2/api/html/BE179564.htm

Alphaleonis.Win32.Filesystem.Directory.Delete(path)
Другие вопросы по тегам