【问题标题】:Preserving File Permissions in .NET在 .NET 中保留文件权限
【发布时间】:2012-01-10 02:29:56
【问题描述】:

我有一个经常被删除和重新创建的文件(我无法控制这种行为)。但是,当重新创建文件时,它不会保留删除前的权限。所以我写了这段代码来尝试解决这个问题:

var access = File.GetAccessControl(filepath, AccessControlSections.Access);
deleteAndRecreate(filepath);
File.SetAccessControl(filepath, access);

但这不起作用。如果我明确授予“TestUser”对该文件的读取权限,那么在我运行此代码后,TestUser 将不再具有读取权限。我做错了什么?

【问题讨论】:

  • 除了删除文件之外,你能做点别的吗...比如清空它?什么是文件不存在而空文件无法完成?
  • 您是否尝试在具有预设权限的目录下创建文件?
  • @BlueMonkMN 我完全会这样做,但正如我所说,我无法控制这种行为。这是第 3 方库问题。
  • 不幸的是,我的理解不足以回答这个问题,但我想您不能将 FileSecurity 对象的相同实例分配给您从中获取它的文件以外的文件。也许您可以通过阅读msdn.microsoft.com/en-us/library/ms229742.aspx 上的 ACL 技术概述来了解这一点
  • 如果可以的话,你最好设置父文件夹的权限(一次),这样无论何时创建文件,它都会默认从其父文件夹继承正确的权限。跨度>

标签: c# .net permissions file-permissions access-control


【解决方案1】:
//Get current attributes
var fileAttributes = File.GetAttributes(filePath);

删除文件,重新创建它,然后使用以下命令恢复原始权限:

//Restore the file's original attributes
File.SetAttributes(filePath, fileAttributes);

【讨论】:

  • 文件属性不包括访问控制权限。
  • 我检查并仔细检查了,这似乎也不起作用。
  • 啊,好吧,你说得对。此代码将仅维护“ReadOnly”和类似属性。不是用户特定的访问权限。
【解决方案2】:

不带第二个参数试试

var access = File.GetAccessControl(filepath); 
deleteAndRecreate(filepath); 
File.SetAccessControl(filepath, access); 

【讨论】:

  • 这会毫无例外地执行吗?
【解决方案3】:

我的猜测是,一旦文件被删除,GetAccessControl 返回的FileSecurity 对象就不再有效。

您是否尝试过类似的方法(未经测试)?

deleteAndRecreate(filepath);
FileSecurity access = File.GetAccessControl(filepath, AccessControlSections.Access);
access.AddAccessRule(new FileSystemAccessRule(account, rights, controlType));

(如果这种通用方法有效,您可能能够从您之前创建的access 对象中获取访问规则并重用它们。它们很可能在删除后保持有效。)

【讨论】:

    猜你喜欢
    • 2016-04-21
    • 2011-11-02
    • 1970-01-01
    • 2012-05-17
    • 2011-03-13
    • 1970-01-01
    • 2015-03-26
    • 2011-06-12
    相关资源
    最近更新 更多