File-Stream используется другим процессом - PullRequest
4 голосов
/ 22 марта 2012
FileStream f=new FileStream("c:\\file.xml",FileMode.Create);
StreamWriter sf=new StreamWriter(f);
sf.WriteLine(stroka);
sf.Close();
sf.Dispose();
f.Close();
f.Dispose();
FileStream f1=new FileStream("c:\\file.xml",FileMode.Open);
StreamReader sr=new StreamReader("c:\\file.xml");
xmlreader=new XmlTextReader(sr);
sr.Close();
sr.Dispose();
f1.Close();
f1.Dispose();

Я получаю эту ошибку:

Процесс не может получить доступ к файлу 'c: \ file.xml', поскольку он используется другим процессом

Я закрыл все и распорядился всем. В чем проблема?

Ответы [ 4 ]

9 голосов
/ 22 марта 2012

Заменить:

StreamReader sr=new StreamReader("c:\\file.xml");

На:

StreamReader sr=new StreamReader(f1);

Вы создаете новый StreamReader без FileStream


Дополнительные данные:

  • Объект StreamReader вызывает Dispose для указанного объекта Stream при вызове StreamReader.Dispose.

  • Dispose метод вызывает метод Close.Прочитайте это для получения дополнительной информации.

Значение: вы можете удалить Dispose и Close, которые вы написали для FileStream

FileStream f = new FileStream("c:\\file.xml", FileMode.Create);
StreamWriter sf = new StreamWriter(f);
sf.WriteLine(stroka);
sf.Dispose();

FileStream f1 = new FileStream("c:\\file.xml", FileMode.Open);
StreamReader sr = new StreamReader(f1);
xmlreader = new XmlTextReader(sr);
sr.Dispose();

Но вы действительно должны использовать using statement для неуправляемых ресурсов , читать это .

2 голосов
/ 22 марта 2012

Изменить

StreamReader sr=new StreamReader("c:\\file.xml"); 

на

StreamReader sr=new StreamReader(f1); 

обе следующие строки кода являются отдельными объектами, пытающимися получить доступ к одному и тому же файлу:

FileStream f1=new FileStream("c:\\file.xml",FileMode.Open); 
StreamReader sr=new StreamReader("c:\\file.xml"); 

таккаждый пытается получить доступ к файлу по отдельности, в то время как изменение кода на мои случаи подключения sr для доступа к файлу через f1 ​​

2 голосов
/ 22 марта 2012

У вас есть FileStream и StreamReader в одном файле. Удалить эту строку:

FileStream f1=new FileStream("c:\\file.xml",FileMode.Open);     
1 голос
/ 22 марта 2012

Проблема может быть в:

FileStream f1=new FileStream("c:\\file.xml",FileMode.Open);
StreamReader sr=new StreamReader("c:\\file.xml");

Поток файла может получить доступ к файлу, а затем StreamReader пытается получить доступ к файлу отдельно.Попробуйте, чтобы ваш StreamReader использовал тот же определенный поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...