Удаление слишком длинного пути из папки с общим доступом
Я пытаюсь удалить папки в общей папке в сети, используя 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)