【问题标题】:Change target for symbolic link in windows在 Windows 中更改符号链接的目标
【发布时间】:2012-07-03 00:48:32
【问题描述】:

如何更改现有符号链接的目标。任何解决方案都可以:控制台、powershell 等。

重要的想法是自动进行此更改,因此删除链接然后创建新链接的解决方案对我不起作用。

【问题讨论】:

  • 如果您将删除和重新创建包装在事务中,我相信它将是原子的。
  • 什么样的交易?我认为像在同一个磁盘上移动文件这样的文件系统操作是原子的。两个文件操作都没有。如果我错了,请纠正我。
  • 看我的回答。 Windows Vista 中添加了对事务性 NTFS 的支持。

标签: windows filesystems symlink


【解决方案1】:

这似乎可以通过ZwFsControlFile function 使用FSCTL_SET_REPARSE_POINT control code 来实现。至少这是我从 Far Manager 如何通过 Process Monitor 收集到的。

【讨论】:

【解决方案2】:

您可以尝试创建一个新的符号链接,然后重命名新链接以覆盖旧链接。

这里提到了一些可能性:

Is an atomic file rename (with overwrite) possible on Windows?

【讨论】:

    【解决方案3】:

    您可以使用事务性 NTFS。请参阅以下函数:

    缺点是 MS 正在弃用对事务的支持。特别是在 Windows Server 2012 中引入的新文件系统中不提供事务。

    【讨论】:

    • 谢谢你,哈利。从来没有可能进行交易。不幸的是,弃用是一个不好的迹象,所以我不确定我是否能够使用它。
    【解决方案4】:

    在 Windows 7 CMD 控制台中对 LSemi 的方法稍作修改对我有用

    mklink TempLink NewTarget
    
    copy /l /y TempLink OldLink
    
    del TempLink
    

    我有一个每秒多次读取 OldLink 的进程,通过这种方法,我能够不断地将 OldLink 更新到新目标,而不会导致读取错误。严格来说,这可能不是原子的,但影响符号链接副本所花费的时间必须非常短,以至于不会干扰。

    【讨论】:

    • /l 是做什么的? Windows Server copy 没有列出它。
    • Windows 7 copy /? 显示此/L If the source is a symbolic link, copy the link to the target instead of the actual file the source link points to.
    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2011-03-21
    • 2011-11-08
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    相关资源
    最近更新 更多