Atomi c замена символической ссылки windows c# выдает IOException "Это приложение не поддерживает текущую операцию над символическими c ссылками" - PullRequest
0 голосов
/ 29 апреля 2020

Цель состоит в том, чтобы обновить цель символической ссылки атомарно. Все мои исследования говорят, что единственный способ сделать это - создать новую символическую ссылку с новой целью, а затем удалить / заменить старую символическую ссылку. File.Replace () выбрасывает IOException «Это приложение не поддерживает текущую операцию над символическими c ссылками». В настоящее время я использую родной "kernel32.dll" для создания символической ссылки. Любой совет, как go об обновлении / замене старой символической ссылки на новую, очень помог бы.

if (File.Exists(oldSymlink))
{
    // Create temp symlink to replace old link
    var replacementSymlinkFile = "path/to/newLink"; 

    CreateSymbolicLink(replacementSymlinkFile, newTargetFile, 0)

    File.Replace(replacementSymlinkFile, oldSymlink, null); // throws SYSTEM IO ERROR This application does not support the current operation on symbolic links
}

1 Ответ

1 голос
/ 30 апреля 2020

Как утверждает @Eryk Sun, использование метода MoveFileExW () из собственного "kernel32.dll" позволяет заменить одну символическую ссылку другой. У меня не было возможности попробовать. NET Метод Core Move (), поскольку я уже использую нативный dll, я перешел к предыдущему варианту. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...