关于安全性:C#:编辑文件访问控制

C# : edit file access control

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

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

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

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


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

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

见这篇文章:

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

On a FAT or FAT32 volume, you can set permissions for shared folders but not for files and folders within a shared folder. Moreover, share permissions on a FAT or FAT32 volume restrict network access only, not access by users working directly on the computer.

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

看到这个问题(从 Vitaliy 的评论中偷来的):

如何锁定文件

已接受答案的代码:

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