系统IO异常:进程不能访问文件,因为它正在被另一个进程c#使用
本文关键字:进程 因为 另一个 使用 异常 IO 不能 文件 访问 系统 | 更新日期: 2023-09-27 18:08:35
我已经看到了几个关于这个问题的帖子。我已经实现了所有的建议,如使用flush(), close()方法对流写入器和连接对象,使用GC.Collect()强制清理,使用using{}来自动处置
我正在做简单的操作从DB和写到文本文件。这是我的代码
public void WriteToFile(string ProductName)
{
//Already Got Data from DB and stored in "ProductName"
//saving in File
if (!File.Exists(path11))
{
File.Create(path11);
StreamWriter tw = new StreamWriter(path11);
tw.WriteLine(ProductName+"@"+DateTime.Now.ToString());
tw.Flush();
tw.Close();
}
else if (File.Exists(path11))
{
StreamWriter tw = new StreamWriter(path11, true);
tw.WriteLine(ProductName + "@" + DateTime.Now.ToString());
tw.Flush();
tw.Close();
}
GC.Collect();
}
我得到的另一个建议是锁定对象。但我无法实施……任何建议都会有帮助的
File.Create
创建文件并返回一个打开的流。你真的不需要那些逻辑。只要使用new StreamWriter(path11, true)
,它将创建文件,如果它不存在,如果它附加到它。using
也有帮助:
public void WriteToFile(string ProductName)
{
//Get Data from DB and stored in "ProductName"
using (var tw = new StreamWriter(path11, true))
{
tw.WriteLine(ProductName+"@"+DateTime.Now.ToString());
}
}
FileCreate
返回一个应该用来实例化StreamWriter
的流:
var file = File.Create(path11);
StreamWriter tw = new StreamWriter(file);
并且您应该使用using
块来确保您的流和文件在完成写入时关闭。