如何更改已存在的符号链接的目标。任何解决方案都可以:控制台,powershell等。
重要的是要使此更改具有原子性,因此删除链接然后创建新链接的解决方案对我不起作用。
如何更改已存在的符号链接的目标。任何解决方案都可以:控制台,powershell等。
重要的是要使此更改具有原子性,因此删除链接然后创建新链接的解决方案对我不起作用。
ZwFsControlFile
函数和FSCTL_SET_REPARSE_POINT
控制码似乎可以实现此功能。至少通过使用 Process Monitor 查看 Far Manager 的使用情况,我从中获取了相关信息。mklink TempLink NewTarget
copy /l /y TempLink OldLink
del TempLink
我有一个进程,每秒钟多次读取OldLink,并且通过这种方法,我能够不断更新OldLink到新的目标,而不会导致读取错误。严格来说,这可能不是原子操作,但是影响的时间非常短,不会干扰。
copy /?
显示了以下内容:/L 如果源是符号链接,则将链接复制到目标,而不是源链接指向的实际文件。
- Gyandir
命令的输出,以显示每个步骤后文件系统的确切变化。我测试了你的步骤:在一个单独的Cygwin窗口中,我运行了一个简单的无限循环:while true; do cat symlink.txt; done
。然后我使用了你的技巧来更新symlink.txt
,使其指向不同的文件。我的无限读取文件循环从未失败过。完美地工作着。我想知道copy
是如何执行此操作的!很烦人的是,MKLINK
没有/F
(强制)选项来执行相同的操作。UNIX有这个选项。 - kevinarpe