系统IO异常:进程无法访问该文件,因为它正由另一个进程c#使用

时间:2014-06-15 03:59:06

标签: c# .net

我已经看过几个关于这个问题的帖子。我已经实现了所有的建议,比如在streamwriter和连接对象上使用flush(),close()方法,使用GC.Collect()来强制清理,使用{}来自动执行

我正在从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();
}

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

FileCreate返回一个您应该用来实例化StreamWriter的流:

var file = File.Create(path11);
StreamWriter tw = new StreamWriter(file);

您应该使用using块来确保在完成编写后关闭流和文件。