2017-01-26 9 views
0

Я прочитал много ответов по этому вопросу, но ни один из них не помогает мне. Теперь прошло уже 5 лет, когда у меня был C#, и я помню, что все это забыл. Но мне нравится снова использовать язык для автоматизации. Итак, вот немного кода у меня уже есть:VisualStudio Express 2012: StreamReader дает ошибку [System.UnauthorizedAccessException]

{ 
    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 не распознает его (красные линии под словами), говоря, что мне не хватает экземпляра объекта или что-то еще из проблемы (просто пытаюсь приклеить вещи вместе).

Может кто-нибудь попытаться получить меня в правильном направлении, пожалуйста?

+0

изменения файлов C. ободочной кишки в некоторый другой каталог как D –

+0

Другая проблема в вашем коде: 'textBox1.ToString()' будет return 'System.Windows.Forms.TextBox, Text: ', а не содержимое текстового поля, используйте для этого 'textBox1.Text'. –

+0

Выполняете ли вы программу под пользователем 'decraiec'? –

ответ

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; 
} 
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)) 
{ 
    ... 
}