我有一个程序可以使用以下方法将一些数据写入文件。
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)
问题:我需要什么代码才能捕获此错误,如何授予访问权限?
更新:
根据此答案修改了代码,以摆脱过时的方法。
您可以使用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 } }
就获得那些许可而言,您将不得不要求用户以某种方式为您执行此操作。如果您可以通过编程方式执行此操作,那么我们都会有麻烦;)