系统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();
}

我得到的另一个建议是锁定对象。但我无法实施……任何建议都会有帮助的

系统IO异常:进程不能访问文件,因为它正在被另一个进程c#使用

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块来确保您的流和文件在完成写入时关闭。

相关文章: