FileIOPermission 类

定义

注意

Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}

控制文件和文件夹的访问权限。 此类不能被继承。

public ref class FileIOPermission sealed : System::Security::CodeAccessPermission, System::Security::Permissions::IUnrestrictedPermission
public sealed class FileIOPermission : System.Security.CodeAccessPermission, System.Security.Permissions.IUnrestrictedPermission
[System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public sealed class FileIOPermission : System.Security.CodeAccessPermission, System.Security.Permissions.IUnrestrictedPermission
[System.Serializable]
public sealed class FileIOPermission : System.Security.CodeAccessPermission, System.Security.Permissions.IUnrestrictedPermission
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class FileIOPermission : System.Security.CodeAccessPermission, System.Security.Permissions.IUnrestrictedPermission
type FileIOPermission = class
    inherit CodeAccessPermission
    interface IUnrestrictedPermission
[<System.Obsolete("Code Access Security is not supported or honored by the runtime.", DiagnosticId="SYSLIB0003", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
type FileIOPermission = class
    inherit CodeAccessPermission
    interface IUnrestrictedPermission
[<System.Serializable>]
type FileIOPermission = class
    inherit CodeAccessPermission
    interface IUnrestrictedPermission
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type FileIOPermission = class
    inherit CodeAccessPermission
    interface IUnrestrictedPermission
Public NotInheritable Class FileIOPermission
Inherits CodeAccessPermission
Implements IUnrestrictedPermission
继承
FileIOPermission
属性
实现

示例

以下示例演示使用 的代码 FileIOPermission 。 在下面的两行代码之后, 对象表示读取客户端计算机本地磁盘上 f 的所有文件的权限。 然后,代码示例需要权限来确定应用程序是否有权读取文件。

FileIOPermission^ f = gcnew FileIOPermission( PermissionState::None );
f->AllLocalFiles = FileIOPermissionAccess::Read;
try
{
    f->Demand();
}
catch (SecurityException^ s)
{
    Console::WriteLine(s->Message);
}
FileIOPermission f = new FileIOPermission(PermissionState.None);
f.AllLocalFiles = FileIOPermissionAccess.Read;
try
{
    f.Demand();
}
catch (SecurityException s)
{
    Console.WriteLine(s.Message);
}
Dim f As New FileIOPermission(PermissionState.None)
f.AllLocalFiles = FileIOPermissionAccess.Read
Try
    f.Demand()
Catch s As SecurityException
    Console.WriteLine(s.Message)
End Try

在下面的两行代码之后, 对象表示 f2 读取 C:\test_r以及读取和写入到C:\example\out.txt。 Read``Write和 表示前面所述的文件/文件夹权限。 创建权限后,代码需要权限来确定应用程序是否有权读取和写入文件。

FileIOPermission^ f2 = gcnew FileIOPermission( FileIOPermissionAccess::Read,"C:\\test_r" );
f2->AddPathList( (FileIOPermissionAccess) (FileIOPermissionAccess::Write | FileIOPermissionAccess::Read), "C:\\example\\out.txt" );
try
{
    f2->Demand();
}
catch (SecurityException^ s)
{
    Console::WriteLine(s->Message);
}
FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, "C:\\test_r");
f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, "C:\\example\\out.txt");
try
{
    f2.Demand();
}
catch (SecurityException s)
{
    Console.WriteLine(s.Message);
}
Dim f2 As New FileIOPermission(FileIOPermissionAccess.Read, "C:\test_r")
f2.AddPathList(FileIOPermissionAccess.Write Or FileIOPermissionAccess.Read, "C:\example\out.txt")
Try
    f2.Demand()
Catch s As SecurityException
    Console.WriteLine(s.Message)
End Try

注解

此权限区分 由 提供的以下四种类型的文件 IO 访问 FileIOPermissionAccess

  • Read:对文件内容的读取访问权限或对文件相关信息(例如其长度或上次修改时间)的访问。

  • Write:对文件内容的写入访问权限,或者对更改文件信息(例如文件名称)的访问权限。 还允许删除和覆盖。

  • Append:只能写入文件末尾。 无法读取。

  • PathDiscovery:访问路径本身中的信息。 这有助于保护路径中的敏感信息(如用户名)以及路径中显示目录结构的信息。 此值不授予对路径所指代的文件或文件夹的访问权限。

备注

授予 Write 对程序集的访问权限类似于授予程序集完全信任。 如果应用程序不应写入文件系统,则它不应 Write 具有访问权限。

所有这些权限都是独立的,这意味着对一个权限的权限并不意味着对另一个的权限。 例如, Write 权限并不意味着对 或 Read 具有权限 Append 。 如果需要多个权限,可以使用按位 OR 进行组合,如以下代码示例所示。 文件权限根据规范绝对路径进行定义;应始终使用规范文件路径进行调用。

FileIOPermission 描述对文件和文件夹的受保护操作。 File类有助于提供对文件和文件夹的安全访问。 创建文件的句柄时,将执行安全访问检查。 通过创建时执行检查,可以最大程度地降低安全检查对性能的影响。 打开文件一次,而读取和写入可能会多次发生。 打开文件后,不会执行进一步检查。 如果将对象传递给不受信任的调用方,则可能会滥用该对象。 例如,文件句柄不应存储在公共全局静态中,在公共全局静态中,权限较少的代码可以访问它们。

FileIOPermissionAccess 指定可以针对文件或文件夹执行的操作。 此外,可以使用位 OR 组合这些操作,以形成复杂实例。

访问文件夹意味着访问它包含的所有文件,以及访问其子文件夹中的所有文件和文件夹。 例如, Read 访问 C:\folder1\ 意味着 Read 访问 C:\folder1\file1.txt、C:\folder1\folder2、C:\folder1\folder2\file2.txt \ 等。

备注

在 .NET Framework 4 之前.NET Framework版本中,可以使用 方法防止受信任代码意外 CodeAccessPermission.Deny 访问系统资源。 Deny 现已过时,对资源的访问权限现在仅由为程序集授予的权限集决定。 若要限制对文件的访问,必须在沙盒中运行部分受信任的代码,并仅将其权限分配给允许代码访问的资源。 有关在沙盒中运行应用程序的信息,请参阅如何:在沙盒中运行 部分受信任的代码

构造函数

FileIOPermission(FileIOPermissionAccess, AccessControlActions, String)

使用对指定文件或目录的指定访问权限和对文件控制信息的指定访问权限初始化 FileIOPermission 类的新实例。

FileIOPermission(FileIOPermissionAccess, AccessControlActions, String[])

使用对指定文件和目录的指定访问权限和对文件控制信息的指定访问权限初始化 FileIOPermission 类的新实例。

FileIOPermission(FileIOPermissionAccess, String)

初始化对指定文件或目录具有指定访问权限的 FileIOPermission 类的新实例。

FileIOPermission(FileIOPermissionAccess, String[])

初始化对指定文件和目录具有指定访问权限的 FileIOPermission 类的新实例。

FileIOPermission(PermissionState)

根据指定,使用完全受限制或不受限制的权限初始化 FileIOPermission 类的新实例。

属性

AllFiles

获取或设置对所有文件的允许访问权限。

AllLocalFiles

获取或设置对所有本地文件的允许访问权限。

方法

AddPathList(FileIOPermissionAccess, String)

将指定文件或目录的访问权限添加到现有的权限状态。

AddPathList(FileIOPermissionAccess, String[])

将指定文件和目录的访问权限添加到现有的权限状态中。

Assert()

声明调用代码能够通过调用此方法的代码,访问受权限请求保护的资源,即使未对堆栈中处于较高位置的调用方授予访问该资源的权限。 使用 Assert() 会引起安全问题。

(继承自 CodeAccessPermission)
Copy()

创建并返回当前权限的相同副本。

Demand()

如果未对调用堆栈中处于较高位置的所有调用方授予当前实例所指定的权限,则在运行时强制 SecurityException

(继承自 CodeAccessPermission)
Deny()
已过时。
已过时。

防止处于调用堆栈较高位置的调用函数使用可以调用此方法来访问当前实例指定资源的代码。

(继承自 CodeAccessPermission)
Equals(Object)

确定指定的 FileIOPermission 对象是否等于当前的 FileIOPermission

Equals(Object)

确定指定的 CodeAccessPermission 对象是否等于当前的 CodeAccessPermission

(继承自 CodeAccessPermission)
FromXml(SecurityElement)

从 XML 编码重新构造具有指定状态的权限。

GetHashCode()

获取 FileIOPermission 对象的哈希代码,此代码适合在哈希算法和数据结构(例如哈希表)中使用。

GetHashCode()

获取 CodeAccessPermission 对象的哈希代码,此代码适合在哈希算法和数据结构(例如哈希表)中使用。

(继承自 CodeAccessPermission)
GetPathList(FileIOPermissionAccess)

使用指定的 FileIOPermissionAccess 权限获取所有文件和目录。

GetType()

获取当前实例的 Type

(继承自 Object)
Intersect(IPermission)

创建并返回一个权限,该权限是当前权限与指定权限的交集。

IsSubsetOf(IPermission)

确定当前权限是否为指定权限的子集。

IsUnrestricted()

返回一个值,该值指示当前权限是否不受限制。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
PermitOnly()

防止处于调用堆栈较高位置的调用函数使用此代码,此代码将调用此方法来访问除当前实例指定的资源以外的所有资源。

(继承自 CodeAccessPermission)
SetPathList(FileIOPermissionAccess, String)

设置指定文件或目录的特定访问权限,以替换现有的权限状态。

SetPathList(FileIOPermissionAccess, String[])

设置对指定文件和目录的指定访问权限,同时用一组新路径替换指定访问权限的当前状态。

ToString()

创建并返回当前权限对象的字符串表示形式。

(继承自 CodeAccessPermission)
ToXml()

创建权限及其当前状态的 XML 编码。

Union(IPermission)

创建一个权限,该权限是当前权限与指定权限的并集。

显式接口实现

IPermission.Demand()

如果不满足安全要求,则会在运行时引发 SecurityException

(继承自 CodeAccessPermission)
IStackWalk.Assert()

断言调用代码可以访问当前权限对象所标识的资源,即使尚未对堆栈中的高级调用方授予访问该资源的权限。

(继承自 CodeAccessPermission)
IStackWalk.Demand()

在运行时确定调用堆栈中的所有调用方是否已被授予当前权限对象所指定的权限。

(继承自 CodeAccessPermission)
IStackWalk.Deny()

将导致通过调用代码传递的当前对象的每个 Demand() 失败。

(继承自 CodeAccessPermission)
IStackWalk.PermitOnly()

导致所有对象的每个 Demand()(除了通过调用代码的当前那个)失败,即使调用堆栈中较高级别的代码已被授予访问其他资源的权限也是如此。

(继承自 CodeAccessPermission)

适用于

另请参阅