StreamWriter, FileStream и блокировки файлов Windows - PullRequest
0 голосов
/ 24 ноября 2010

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

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

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

Я что-то не так делаю или это ошибка Windows?

EDIT

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

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

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

Ответы [ 2 ]

0 голосов
/ 24 ноября 2010

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

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.

0 голосов
/ 24 ноября 2010

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

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

(или попробуйте позвонить sw.Dispose() вручную)

...