C#:编辑文件访问控制

时间:2011-10-31 10:18:35

标签: c# security access-control

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

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

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

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

1 个答案:

答案 0 :(得分:2)

您的闪存驱动器有哪些文件系统?我猜的是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
}