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

标签 c# .net

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


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);


     }
}

运行程序时出现错误:

Unhandled Exception: System.UnauthorizedAccessException: Access to the path 'mypath' is denied. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, nt32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions ptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolea bFromProxy)

问题:我需要什么代码来捕捉这个以及我如何授予访问权限?

最佳答案

更新:

根据this answer修改了代码摆脱过时的方法。

您可以使用安全命名空间来检查:

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
    }

}

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

关于c# - 您如何检查写入目录或文件的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/130617/

相关文章:

c# - 在 C# 中将具有变量名称/值对的 JSON 反序列化为对象

.net - 如何避免在 IIF 中遇到错误的部分?

c# - "Non-nullable event must contain a non-null value when exiting constructor"

.net - F# 字符串连接运算符的用途是什么 ^

C# Winforms 控件 - DataGridView - 更新数据库

c# - 如何用两个连续的空格分割一个字符串

c# - CheckedListBox 控件中的 WordWrap

使用另一种形式更改datagridview字体大小时C#异常错误

.net - 托管 C++ .NET 应用程序中未处理的托管异常的访问冲突问题

c# - 如何使用请求内容的实例化和操作调用来测试 MVC Controller ?