File.Move不会从目标目录继承权限?

时间:2010-05-28 14:36:30

标签: c# windows-7 .net-4.0 file-permissions

如果在创建文件时出现问题,我一直在写一个临时文件,然后移动到目的地。类似的东西:

        var destination = @"C:\foo\bar.txt";
        var tempFile = Path.GetTempFileName();
        using (var stream = File.OpenWrite(tempFile))
        {
            // write to file here here
        }

        string backupFile = null;
        try
        {
            var dir = Path.GetDirectoryName(destination);
            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
                Util.SetPermissions(dir);
            }

            if (File.Exists(destination))
            {
                backupFile = Path.Combine(Path.GetTempPath(), new Guid().ToString());
                File.Move(destination, backupFile);
            }

            File.Move(tempFile, destination);

            if (backupFile != null)
            {
                File.Delete(backupFile);
            }
        }
        catch(IOException)
        {
            if(backupFile != null && !File.Exists(destination) && File.Exists(backupFile))
            {
                File.Move(backupFile, destination);
            }
        }

问题是这种情况下新的“bar.txt”不会继承“C:\ foo”目录的权限。然而,如果我直接在“C:\ foo”中通过explorer / notepad等创建文件,则没有问题,所以我相信权限在“C:\ foo”上正确设置。

更新

找到Inherited permissions are not automatically updated when you move folders,也许它也适用于文件。现在正在寻找一种强制更新文件权限的方法。这样做有更好的方法吗?

1 个答案:

答案 0 :(得分:31)

找到我需要的是这个:

var fs = File.GetAccessControl(destination);
fs.SetAccessRuleProtection(false, false);
File.SetAccessControl(destination, fs);

这会重置文件权限以继承。