【发布时间】:2011-03-04 14:18:35
【问题描述】:
我有一组包含多个链接的文件。
这些文件归 TFS 源代码管理所有,但对它们进行了其他链接。如何在不清除只读位的情况下删除附加链接。
可以假设:
- 文件有多个链接
- 您没有删除 TFS 拥有的名称
- 没有潜在的竞争条件
- 您对文件拥有 ACL 完全控制权
- 机器不会断电,您的程序也不会被杀死,除非花费的时间太长。
假设是不安全的:
- 只读位已设置(如果未设置,请不要设置)
- 如果您遇到错误并且最初设置了只读位,您可以将其保留为清除
不要迁移到超级用户——如果迁移到那里,答案是不可能的,因为没有标准工具可以做到这一点。
在假设的 *nix 系统上,需要对文件具有写权限才能删除它,有一个涉及 fchmod() 的解决方案。但是,出现这种行为的系统是 Windows 系统。
【问题讨论】:
-
如果您不想将此迁移到超级用户,请询问编程问题。这意味着指定可接受的语言和工具集,注意您查看的哪些 API 不适合您,您从尝试中得到哪些错误或异常,等等。我真的不知道如何回答这个问题。不过,我不会投票关闭 - 只是要求您编辑这些内容。
-
用户模式下的任何工作方法都是可以接受的。 DeleteFile 不会删除只读文件。 GetFileAttributes/SetFileAttributes 可能不能很好地工作,因为它们采用文件名而不是句柄(祝你好运在刚刚删除的文件上更改只读)。
-
什么样的链接?这个问题没有多大意义。
-
@Robaticus:听说过 CreateHardLink 吗?
-
@Joshua 不,抱歉,我没有。坦率地说,您对 TFS 的评论似乎有点牵强附会,在这里。由于 TFS 并不真正关心(太多)硬盘上某处文件的存在,因此它与这个问题有些无关。现在,如果你回顾你的经验,想想世界上有多少种不同类型的链接,从超链接到丢失链接,你可能会明白我为什么感到困惑。
标签: windows winapi readonly hardlink file-attributes