我有一个文件集与多个链接。

该文件是拥有通过TFS源的控制,但其他链接到他们了他们。我怎么删除的额外的链接,而无需清除只读位。

它是安全的假设:

  • 该文件已经超过一个链接到他们
  • 你是不是删除名称所拥有的TFS
  • 不存在任何潜在的竞争条件
  • 你有ACL的完全控制的文件
  • 机器不会失去权力,也不会将你的程序中被杀害,除非这需要太长。

它是不安全的假设:

  • 只读位置(不设置,如果它不出)
  • 你可以留下的只读点清楚,如果你遇到一个错误以及最初设定

不迁移到超级用户--如果迁移有的答案是不可能的,因为没有标准的工具,可以做到这一点。

在一个假设*尼克斯系统中的哪一个需要写允许在一个文件中删除它,有一个解决方案涉及fchmod().但是系统的,表现出这种行为Windows系统。

有帮助吗?

解决方案

你有没有尝试过使SeBackupPrivilege和SeRestorePrivilege,让管理员来放松很多的安全检查?

你可能会找到 这个新闻组螺纹 有帮助的。

编辑:做它没有权限,以及没有创造一个竞争条件,将需要分布链接支持本在Vista以上。顺便说一句,你可以设定的属性使用处理,通过FILE_BASIC_INFO到 SetFileInformationByHandle, ,这可以交易,请参见附注。或者您可以使用FindFirstFileName找到另一个艰苦的链接到同一文件,该文件没有被删除,其设置只读。

其他提示

谢谢你Ben Voigt:

#include <windows.h>

int main(int argc, char **argv)
{
    while (*++argv) {
        HANDLE h;
        DWORD attrs;

        attrs = GetFileAttributes(*argv);
        SetFileAttributes(*argv, attrs & ~FILE_ATTRIBUTE_READONLY);
        h = CreateFile(*argv, GENERIC_READ|GENERIC_WRITE, 7, NULL, OPEN_EXISTING,
                    FILE_FLAG_DELETE_ON_CLOSE, NULL);
        SetFileAttributes(*argv, attrs);
        if (h != INVALID_HANDLE_VALUE) {
            CloseHandle(h);
        }
    }
}

这是不可能的。硬链路只是另一名为文件;你可以有很多硬联系,但只有一个基本文件的目的(数据、安全描述、属性文件的时间,等等)。如果该文件的目的只读设定的属性,那么任何硬的链接,通过的定义也会有属性设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top