我的代码调用DataSet类的ReadXml方法并传入一个文件名ReadXml(strFileName)。有时,这会抛出System.IO.IOException,因为该文件正被另一个进程使用。
如果我将代码更改为使用ReadXml(流)方法,并像这样传递一个FileStream:
using(FileStream fs = new FileStream(this.filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ))
{
MyDS.ReadXxml(FileStream);
}这会阻止IOException的发生吗?当您简单地传入一个文件名时,在幕后发生了什么?
发布于 2010-07-24 04:21:08
如果以字符串形式传入文件名,则DataSet类将为您创建一个FileStream对象。接受Stream作为参数的重载方法允许您传入一个Stream对象(如果您有一个对象而不是一个文件名)。
接受字符串作为参数的版本将简单地创建一个FileStream,并将其传递到接受流作为参数的版本。
您应该使用适合您拥有的数据的重载。在本例中是字符串。
发布于 2010-07-24 03:42:33
最有可能的情况是,它们都打开一个FileStream并将其传递给XmlReader.Create,然后使用XmlReader处理数据。
发布于 2010-07-24 03:57:21
“有时这会抛出System.IO.IOException,因为该文件正由另一个进程使用。”
正如您所说的,它抛出了一个异常,因为该文件正被另一个进程使用。您对此无能为力-停止其他进程使用该文件,它将再次工作。
如果您认为这是假的,那么您应该使用问题中的using构造检查所有的FileStreams是否正确关闭。
希望这能有所帮助。
https://stackoverflow.com/questions/3321781
复制相似问题