2010-11-24 2 views
0

Я пишу небольшое приложение для экспорта и импорта данных из базы данных с использованием .NET DataSets и XML, и в качестве части этого я делаю следующее.StreamWriter, FileStream и блокировки файлов Windows

StreamWriter sw = new StreamWriter(file); 
sw.Write(xml.OuterXml); 
sw.Close(); 

Проблема заключается в том, что близкий метод закрывает (параметр файла передается в конструктор) FileStream, но не освобождает блокировку файла. Файл является тем, что созданная мной программа создает, поэтому я знаю, что ничто другое не блокирует ее.

Есть ли что-то, что я делаю неправильно или это ошибка в окнах?

EDIT

Да «файл» является объектом FileStream, и я наивно полагал, что вызов близко() на потоке, который оборачивает поток файлов будет также очистки и отчуждать основной поток файла, вызвав FileStream. близкий способ. Но я не уверен в этом.

Обертка этого в используемом блоке все еще имеет тот же эффект.

Одна дополнительная нота является то, что объект FileStream создается в другом методе, но это не имеет никакого значения,

+3

Как вы определяете, что файл по-прежнему заблокирован? Я делаю это довольно часто, и я никогда не сталкивался с проблемой, которую вы описываете. – 2010-11-24 00:25:29

+0

Да, что такое «файл»? Это FileStream? Если это так, вам нужно закрыть его, и это не ошибка ОС. Как и Джим, у меня нет проблем с простыми операциями ввода-вывода. – 2010-11-24 01:19:23

+1

Вы можете контролировать блокировку файлов «анал-ретентивный» и «притворный». Если вы не хотите блокировать файл при его открытии, скажите так: http://msdn.microsoft.com/en-us/library/5h0z48dh.aspx http://msdn.microsoft.com/en-us /library/system.io.fileshare.aspx – 2010-11-24 01:21:58

ответ

-1

Попробуйте использовать это вместо того, чтобы:

 
using (StreamWriter sw = new StreamWriter(file)) 
    sw.Write(xml.OuterXml); 

(или попытаться вызвать sw.Dispose() вручную)

-1

поможет обернуть поток файла в использовании или просто использовать перегруженный метод для создания потока писателя:

using (FileStream fs = new FileStream("path", FileMode.Append)) 
using (StreamWriter sw = new StreamWriter(fs)) 
{ 
    sw.Write(xml.OuterXml); 
    sw.Close(); 
} 

или:

using (StreamWriter sw = new StreamWriter("path")) 
{ 
    sw.Write(xml.OuterXml); 
    sw.Close(); 
} 

Я подозреваю, что проблема в коде, создающее или с помощью FileStream. Возможно, вы могли бы подробнее рассказать о том, как вы используете созданный объект FileStream.

Смежные вопросы