qwertyuiop42 Ответов: 2

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

Я не знаю точно, но, насколько мне известно, он может быть установлен манифестом / сборкой, кодом и политиками безопасности системы.

2 Ответов

Рейтинг:
12

qwertyuiop42

Нашли виновника: просто остановили OneDrive и все работает. Эта идея возникла потому, что даже рабочие переименования очень медленно распространялись на другие окна Проводника или даже с правой панели на панель treeview. Поэтому я начал подозревать расширение оболочки. Перезапуск OneDrive не вернул ошибку, так что это не совсем окончательный и заключительный тест, но, возможно, это происходит только после того, как OneDrive работает в течение нескольких дней. Кто знает?

Обновление: нет, у OneDrive не было дескриптора, открытого в каталоге (по крайней мере, дескриптор сказал мне об этом), он даже не включен в папку OneDrive.


Рейтинг:
1

Member 14099108

Остановил историю файлов, и это, возможно, решило проблему