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

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

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”目录inheritance权限。 然而,如果我通过explorer / notepad等直接在“C:\ foo”中创建一个文件没有问题,所以我相信权限是在“C:\ foo”上正确设置的。

更新

找到移动文件夹时 , 不会自动更新inheritance的权限 ,也可能适用于文件。 现在正在寻找一种强制更新文件权限的方法。 这样做有更好的方法吗?

发现我需要的是这个:

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

这会重置文件权限以inheritance。