小编典典

您如何检查写入目录或文件的权限?

c#

我有一个程序可以使用以下方法将一些数据写入文件。

public void ExportToFile(string filename)
{
     using(FileStream fstream = new FileStream(filename,FileMode.Create))
     using (TextWriter writer = new StreamWriter(fstream))
     {
         // try catch block for write permissions 
         writer.WriteLine(text);


     }
}

运行程序时出现错误:

未处理的异常:System.UnauthorizedAccessException:拒绝访问路径“
mypath”。在System.IO.FileStream.Init(字符串路径,FileMode模式,FileAccess访问,nt32权限,布尔useRights,FileShare共享,Int32
bufferSize,FileOptions选项,SECURITY_ATTRIBUTES secAttrs)
,位于System.IO.FileStream..ctor(字符串路径,FileMode模式,FileAccess访问FileShare共享,Int32
bufferSize,FileOptions选项,字符串msgPath,Boolea bFromProxy)的String
msgPath,布尔bFromProxy)

问题:我需要什么代码才能捕获此错误,如何授予访问权限?


阅读 469

收藏
2020-05-19

共1个答案

小编典典

更新:

根据此答案修改了代码,以摆脱过时的方法。

您可以使用Security名称空间进行检查:

public void ExportToFile(string filename)
{
    var permissionSet = new PermissionSet(PermissionState.None);    
    var writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename);
    permissionSet.AddPermission(writePermission);

    if (permissionSet.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet))
    {
        using (FileStream fstream = new FileStream(filename, FileMode.Create))
        using (TextWriter writer = new StreamWriter(fstream))
        {
            // try catch block for write permissions 
            writer.WriteLine("sometext");


        }
    }
    else
    {
        //perform some recovery action here
    }

}

就获得那些许可而言,您将不得不要求用户以某种方式为您执行此操作。如果您可以通过编程方式执行此操作,那么我们都会有麻烦;)

2020-05-19