FileIOPermission 类
控制访问文件和文件夹的能力
[Visual Basic]
<Serializable>
NotInheritable Public Class FileIOPermission
   Inherits CodeAccessPermission
   Implements IUnrestrictedPermission[C#]
[Serializable]
public sealed class FileIOPermission : CodeAccessPermission,
   IUnrestrictedPermission此权限区分由 FileIOPermissionAccess 提供的下列四种文件 IO 访问权限类型: 
Read:对文件内容的读访问权限或对有关该文件的信息(如它的长度或上次修改时间)的读访问权限。 
Write:对文件内容的写访问权限或更改有关该文件的信息(如它的名称)的访问权限。还允许删除和改写。 
Append:仅向文件结尾写入的能力。不能读取。 
PathDiscovery:对路径本身中的信息的访问权限。这可以保护路径中的敏感信息(如用户名)以及有关路径中显示的目录结构的信息。此值不授予对路径所指代的文件或文件夹的访问权限。 
所有这些权限都是独立的,这意味着对其中一个具有权限并不意味着对另一个也具有权限。例如,具有 Write 权限并不意味着具有 Read 或 Append 权限。如果需要多种权限,可以使用按位“或”将它们组合起来,如下面的代码示例中所示。依据规范化绝对路径来定义文件权限;应始终使用规范化文件路径进行调用。
FileIOPermission 描述文件和文件夹上受保护的操作。File 类提供对文件和文件夹的安全访问。当创建文件的句柄时执行安全访问检查。通过在创建时进行检查,将安全检查对性能的影响降到最低程度。打开文件发生一次,而读和写可以发生多次。文件一旦被打开,就不再进行更多的检查。如果将该对象传递给不可信的调用方,则它可能被误用。例如,不应将文件句柄存储在公共全局静态变量中,因为在那里权限极低的代码也能访问它们。
FileIOPermissionAccess 指定可在文件或文件夹上执行的操作。另外,可以使用按位“或”将这些操作组合成复杂实例。
对文件夹的访问是指对它所包含的所有文件的访问,以及对其子文件夹中的所有文件和文件夹的访问。例如,对 C:\folder1\ 的 Read 访问是指对 C:\folder1\file1.txt、C:\folder1\folder2\ 和 C:\folder1\folder2\file2.txt 等等的 Read 访问。
警告    Unrestricted FileIOPermission 授予对文件系统内所有路径的权限,包括可用于访问单个给定文件的多个路径名。若要 Deny 对文件进行的访问,则必须 Deny 该文件所有可能的路径。例如,如果在将 \\server\share 映射到网络驱动器 X 后,要使用 Deny 拒绝对 \\server\share\file 的访问,则必须使用 Deny 拒绝 \\server\share\file、X:\file 以及可用于访问该文件的所有其他路径。处理多路径的更好方法是结合使用 PermitOnly 和 Deny。在上面的示例中,可以 PermitOnly\\server\share,然后 Deny\\server\share\file,从而完全消除所有替换路径。有关该主题以及结合使用 PermitOnly 和 Deny 的更多信息,请参见拒绝主题中的 Canonicalization Problems Using Deny。
注意   \\server\share\bogusfolder\..\file 形式的路径被安全系统转化为规范化的形式 \\server\share\file,这样只需要 Deny 规范化路径 \\server\share\file 即可,而不必考虑可用于指定同一路径的其他表示方法。
注意    Deny 对于 Windows NTFS 文件系统最为有效。同 FAT32 相比,NTFS 的安全性有很大程度的提高。有关 NTFS 的详细信息,请参见 Windows 文档。
示例
[Visual Basic, C#, C++] 下列示例阐释使用 FileIOPermission 的代码。在下列两行代码之后,对象 f 表示读取客户端计算机的本地磁盘上的所有文件的权限。
[Visual Basic] 
Dim f As New FileIOPermission(PermissionState.None)
f.AllLocalFiles = FileIOPermissionAccess.Read
[C#] 
FileIOPermission f = new FileIOPermission(PermissionState.None);
f.AllLocalFiles = FileIOPermissionAccess.Read;
[Visual Basic, C#, C++] 在下列两行代码之后,对象 f2 表示读取 C:\test_r 和读写 C:\example\out.txt 的权限。Read 和 Write 表示如上面所描述的文件/文件夹权限。
[Visual Basic] 
Dim f2 As New FileIOPermission(FileIOPermissionAccess.Read, "C:\test_r")
f2.AddPathList(FileIOPermissionAccess.Write Or _
   FileIOPermissionAccess.Read, "C:\example\out.txt")
[C#] 
FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, "C:\\test_r");
f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, "C:\\example\\out.txt");