VisualStudio Express 2012:StreamReader提供[System.UnauthorizedAccessException]错误

时间:2017-01-26 12:25:47

标签: c# visual-studio-2012

我在这个问题上已经阅读了很多答案,但没有一个对我有帮助。 现在,我已经有5年了,我有C#而且显然我已经忘记了这一切。但我喜欢再次使用它来将其用于自动化。所以,这里是我已经拥有的一些代码:

{
    string path = @"C:\Users\decraiec\Documents\Client Automated";
   //In this folder I will find all my XML files that I just want to load in a textbox

    public Form1()
    {
        InitializeComponent();
    }


    private void button1_Click(object sender, EventArgs e)
    {
        //create a way to read and write the files
        //go get the files from my harddrive
        StreamReader FileReader = new StreamReader(path);
        //make something readable for what you have fetched
        StreamWriter FileWriter = new StreamWriter(textBox1.ToString());
        int c = 0;
        while (c == FileReader.Read())
        {
            string load = FileReader.ReadToEnd();//read every xmlfile up to the end
            string stream = FileWriter.ToString();//make something readable
        }

        try
        {
            textBox1.Text = FileWriter.ToString();//what you have made readable, show it in the textbox
            FileWriter.Close();
        }
        finally
        {
            if (FileReader != null)
            { FileReader.Close(); }
        }
        if (FileWriter != null)
        { FileWriter.Close(); }
    }
}

如果我像这样运行这段代码,我会得到:

An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll
Additional information: Access to the path 'C:\Users\decraiec\Documents\Atrias Automated' is denied.

虽然我希望看到文本框中列出的所有XML文件都可以点击(但我需要插入可点击的代码) 我一直在寻找我的文件夹和子文件夹和文件,我确实拥有管理权限。关于[mscorlib.dll]我不知道在哪里可以找到它。

现在,如果我将StreamReader包装在use ( var....;) VS中,则无法识别它(单词下面的红线),表示我缺少对象的实例或其他问题(只是试图粘贴)事情在一起)。

有人可以试着让我朝着正确的方向前进吗?

2 个答案:

答案 0 :(得分:0)

我认为你的路径是一个目录,而不是一个文件。这里解决了几乎完全相同的问题:Question: Using Windows 7, Unauthorized Access Exception when running my application

您可以做的是在路径上创建一个DirectoryInfo对象,然后在其上调用GetFiles。例如:

DirectoryInfo di = new DirectoryInfo(directoryPath);

Foreach(var file in di.GetFiles())
{
    string pathToUseWithStreamReader = file.FullName;
}

答案 1 :(得分:0)

您需要使用Directory.GetFiles来获取驻留在" Client Automated"中的任何文件。文件夹,然后遍历它们并将每个文件加载到流中。

var files = Directory.GetFiles(path);
foreach (var file in files)
{
    var content = File.ReadAllText(file);
}

您可以在此处阅读更多内容:
https://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx

另外 - 通常,在处理这样的文件或目录时,在使用它们之前以编程方式检查它们是否存在是一个好主意。你可以这样做:

if (Directory.Exists(path))  
{  
    ...
}  

或使用文件:

if (File.Exists(path))  
{  
    ...
}