Vb.net: переименование каталога завершается с ошибкой "доступ к пути xxx запрещен"
Всем добрый вечер,
Я пытаюсь переименовать каталог из a VB.NET программа:
Call FileIO.FileSystem.RenameDirectory("D:\some\subdir\structure\OldName", "NewName")
Очень просто, ничего сложного. Это создает исключение
"Access to the path '...\OldName' denied"
Что я уже пробовал:
Это не проблема безопасности/разрешения.
Это не проблема только для чтения.
Это не сетевая проблема, все локально.
В каталоге или его подкаталогах нет открытых дескрипторов
Я знаю это, потому что могу переименовать каталог в проводнике или в командной строке, даже когда моя Visual Studio находится в отладчике в исключительном случае.
В Сети есть много подобных вопросов, но причина всегда одна из вышеупомянутых, которые здесь не применимы.
Мне бы очень хотелось, чтобы это сработало. Ну, я всегда мог бы создать командную строку с помощью команды переименования, но это немного перебор :-)
с уважением,
Кристоф
Обновление: методы .NET и функции Win32 API MoveFile и MoveFileEx не работают имя каталога содержит 2 или более периодов. Нравится
Folder 2.1.1
Проводник может переименовать его без проблем. Хммм ... как он это делает, если даже самые низкоуровневые функции API терпят неудачу ?!?
ZurdoDev
Да, это проблема разрешений.
Неужели это так ASP.Net-что? Вы открыли Visual Studio как администратор?
qwertyuiop42
Это настольное приложение Windows Forms. Нет ASP.NET.
Если это проблема с разрешениями, то почему я могу переименовать его из проводника или CMD?
ZurdoDev
Потому что вы работаете в другом контексте в Проводнике и CMD. Попробуйте запустить Visual Studio от имени администратора (щелкните правой кнопкой мыши и запустите от имени администратора)
qwertyuiop42
VS, Explorer и CMD работают в одном контексте. обычный пользователь.
Во всяком случае, я все еще запускал VS с "запуском от имени администратора", та же ошибка. Кстати, скомпилированный двоичный файл также выдает такое же исключение. Даже если запускался из одного и того же CMD, команда переименования работала.
CHill60
У вас есть папка, открытая в вашем коде?
qwertyuiop42
Нет. Кроме того, ни переименование, ни проводник не должны иметь возможности переименовать его в этом случае. Нигде не было открытых ручек. Также проверил с помощью утилиты Sysinternals ручка инструмент
Jochen Arndt
Похоже, что ваше приложение не имеет полной (неограниченной) FileIOPermission.
qwertyuiop42
Хотя это не было проблемой здесь, я все же хотел бы знать, где это установить. для будущих проектов. Это то, что я должен указать в манифесте?
Jochen Arndt
Я не знаю точно, но, насколько мне известно, он может быть установлен манифестом / сборкой, кодом и политиками безопасности системы.