2013-11-07 5 views
0

У меня возникла проблема. В моей программе я создаю файл на рабочем столе:Ошибка при доступе к обработанному файлу

 var desktopFolder = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 
     var fullFileName = Path.Combine(desktopFolder, "Report.txt"); 
     var fs = new FileStream(fullFileName, FileMode.Create); 

     StreamWriter sw = new StreamWriter(fs); 

[... запись в файл ...]

 sw.WriteLine("Report generated with***."); 
     sw.Flush(); 
     sw.Close(); 
     sw.Dispose(); 
     fs.Close(); 
     fs.Dispose(); 

, а позже, после того, как файл будет завершен, я читаю это снова:

 FileInfo fi = new FileInfo(fullFileName); 
     StreamReader objReader = new StreamReader(fi.OpenRead()); 
     string sLine = ""; 
     while (sLine != null) 
     { 
      sLine = objReader.ReadLine(); 
      if (sLine != null) 
      { 
       Report.Items.Add(sLine); 
      } 
     } 

дело в том, если я пытаюсь прочитать файл в два раза, я получаю сообщение об ошибке: процесс не может получить доступ к файлу, так как он используется другим процессом. Какие-нибудь идеи, что может быть неправильно, пожалуйста?

ответ

1

Это, скорее всего, вызвано неправильным вызовом метода Close() на StreamWriter, прежде чем пытаться открыть или получить доступ к файлу с помощью StreamReader. Отправляясь от фрагмента в вашем сообщении, вы захотите сделать следующий вызов после написания всего, что вы хотите, с файлом с StreamWriter.

sw.Close(); 
+0

Спасибо за указание, что из - я на самом деле назвать близко, я добавил эти команды в моей должности. Кажется, я никогда не знаю, какие части кода мне нужно публиковать. : -D В любом случае, это дает мне эту ошибку при чтении во второй раз, первая идет гладко ... – user2960580

+0

Когда вы говорите «дважды читаете файл», вы имеете в виду две итерации цикла или вы фактически создаете другой экземпляр 'StreamReader' и снова передать поток файлов. –

+0

Я создаю его снова и снова. – user2960580

0

Используйте этот код для работы с файлом

using (StreamWriter s = new StreamWriter(/* your arguments here *\)) { 
    // code that uses it here 
} 
// file is closed here 
Смежные вопросы