2015-01-27 4 views
1

Я пытаюсь записать файл, я считаю, что закрываю файл, который я прочитал ранее в коде, но я получаю «System.IO.IO .Exception «Это мой код для чтения и записи в файл.System.IO.IOException используется другим процессом

public class InOutTxt 
{ 
    public List<Employee> ReadFile(string fileName) { 
     FileStream fs = new FileStream(fileName,FileMode.Open ,FileAccess.ReadWrite); 
     StreamReader fileIn = new StreamReader(fileName); 
     fileIn = File.OpenText(fileName); 
     List<Employee> list = new List<Employee>(); 
     string[] test; 
     string name; 
     string ID; 
     string dep; 
     string post; 

     while (!fileIn.EndOfStream || !File.Exists(fileName)) { 

      string inString = fileIn.ReadLine(); 
      test = inString.Split('#'); 
      name = test[0]; 
      ID = test[1]; 
      dep = test[2]; 
      post = test[3]; 
      Employee newEmp = new Employee(name, ID, dep, post); 
      list.Add(newEmp); 

     } 
     fileIn.Close(); 
     fs.Close(); 
     return list; 
    } 

    public void WriteFile(List<Employee> outList, string file) { 

     FileStream fs = new FileStream(file, FileMode.Open, FileAccess.ReadWrite); 
     StreamWriter writeOut = new StreamWriter(file); 

     for (int i = 0; i < outList.Count; i++) { 

      writeOut.WriteLine(outList[i].name + '#' + outList[i].IDnum + '#' + outList[i].department + '#' + outList[i].position); 

     } 
     writeOut.Close(); 
     fs.Close(); 
    } 

} 

Ошибка является встречающийся в этой части кода

StreamReader fileIn = new StreamReader(fileName); 

Если это помогает любому он работает хорошо сегодня утром, единственное крупное изменение, которое я сделал было добавление FileStream атрибута выше ,

+2

Открываешь 3 файлов, но вы закрываете только 2. ошибка находится в 2-ой строке кода, который ничего не делает. Вы перестаете делать ошибки, используя эту команду * using *. –

ответ

1

System.IO.IOException используется другим процессом

Вы открыли файл, используя FileStream конструктор и StreamReader дает ошибку при попытке открыть файл снова с помощью конструктора FileName. Передайте объект FileStream вместо fileName.

FileStream Constructor (String, FileMode)

Конструктор дается доступ на чтение/запись в файл, и он открыт обмен доступа на чтение (то есть запросы, чтобы открыть файл для написания той или другой процесс потерпит неудачу пока объект FileStream не был закрыт, но попытки чтения будут успешными), MSDN.

//File is opened by FileStream and not available for opening before it is closed. 
FileStream fs = new FileStream(fileName,FileMode.Open ,FileAccess.ReadWrite); 
StreamReader fileIn = new StreamReader(fs); //Here pass fs instead of fileName 
Смежные вопросы