【问题标题】:C# : edit file access controlC#:编辑文件访问控制
【发布时间】:2011-12-18 15:14:56
【问题描述】:

您好,我正在处理 c# 项目,我尝试使用该代码锁定文件,使其不被打开、复制甚至删除:

FileInfo fi = new FileInfo(textBox1.Text);
            FileSecurity ds = fi.GetAccessControl();
            ds.AddAccessRule(new FileSystemAccessRule("Authenticated Users",      FileSystemRights.FullControl, AccessControlType.Deny));
            fi.SetAccessControl(ds);

但是当我打开文件时,它被打开并且可以删除,我的代码有什么问题吗?

顺便说一句,该代码在除闪存驱动器之外的任何地方都可以完美运行,我可以阻止从计算机编辑或复制文件,但在闪存驱动器上该应用程序是无用的。

【问题讨论】:

  • 可能这里是您问题的答案 - link

标签: c# security access-control


【解决方案1】:

您的闪存驱动器有什么文件系统?我猜是 FAT32,而不是 NTFS。

FAT32 没有每个文件 ACL 的概念(或者据我所知,没有任何 ACL 的概念)。

见这篇文章:

http://technet.microsoft.com/en-us/library/cc783530(WS.10).aspx

在 FAT 或 FAT32 卷上,您可以为共享文件夹设置权限,但不能为共享文件夹中的文件和文件夹设置权限。此外,FAT 或 FAT32 卷上的共享权限仅限制网络访问,而不是直接在计算机上工作的用户的访问。

唯一的选择是以独占访问模式打开文件,以防止他人在您阅读时更改它

查看这个问题(从 Vitaliy 的评论中窃取):

How to lock file

接受答案的代码:

using (FileStream fs = 
       File.Open("MyFile.txt", FileMode.Open, FileAccess.Read, FileShare.None))
{
    // use fs
}

【讨论】:

  • 正确,它是 FAT,我将其更改为 NTFS,它工作正常,谢谢
猜你喜欢
  • 2010-11-12
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
相关资源
最近更新 更多