StreamWriter,FileStream和Windows文件锁

时间:2010-11-24 00:03:52

标签: c# .net file-io locking

我正在编写一个小应用程序,使用.NET DataSet和XML从数据库导出和导入数据,作为其中的一部分,我正在执行以下操作。

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

问题是close方法关闭FileStream(传递给构造函数的文件参数)但不释放文件锁。该文件是我编写的程序创建的文件,所以我知道没有其他东西可以锁定它。

我做错了什么或这是一个Windows错误?

修改

是'file'是一个FileStream对象,我天真地假设在包装文件流的流上调用close()也会通过调用FileStream.close方法来清理和处理底层文件流。但是我不再确定了。

将其包含在使用块中仍具有相同的效果。

另外需要注意的是,文件流对象是以不同的方法创建的,但不应该有任何区别

2 个答案:

答案 0 :(得分:-1)

请尝试使用此代码:

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

(或尝试手动调用sw.Dispose()

答案 1 :(得分:-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对象。