另一个进程.NET正在使用该文件

时间:2011-07-24 06:10:52

标签: c# .net asp.net file-io

我需要创建/附加一个文本文件并在其中写入一些数据。当我将下面的代码写入我的ASP.NET应用程序时,它会给出另一个进程正在使用该文件的错误。

if (!File.Exists(path\file))
    File.CreateText(path\file);
using(StreamWriter sw = File.AppendText(Server.MapPath(path\file)))
{
    sw.WriteLine("Text Data");
    sw.Close();
}

3 个答案:

答案 0 :(得分:5)

如果另一个进程对你想要的文件有一个独占锁,除了强行删除文件的所有句柄或者杀死进程之外,你几乎无能为力,这两个都会导致未定义的行为(由另一个拥有独家锁定的程序。)

你应该

  1. 等待其他程序完成使用该文件
  2. 写入另一个文件
  3. 其他有意义的东西。
  4. 如果您确定只有您的代码访问此文件,请返回并确保关闭完成之前打开的文件的所有句柄。

    如果您还没有这样做(我们没有看到您的所有代码),您需要关闭File.CreateText()调用中的打开文件句柄,因为它会返回StreamWriter打开文件的句柄。

答案 1 :(得分:5)

您必须在下面的代码中创建类似的文件,并在创建文件后关闭该文件。

if (!File.Exists(""))
{            
    StreamWriter sr =  File.CreateText("");
    sr.Close();
}

MSDN看一下这个例子。 这将向您展示如何创建文本文件。

或者,你可以用这种方式创建一个文本文件;以下代码来自MSDN

if (!File.Exists(path)) 
{
    // Create a file to write to.
    using (StreamWriter sw = File.CreateText(path)) 
    {

    }   
}

答案 2 :(得分:0)

您是否在文本编辑器中打开了文件?你最近在文本编辑器中打开过吗?如果是这样,你应该确保你的文本编辑器已经完全关闭并且它的进程被终止。

如果没有,那么它可能意味着一些其他脚本,或者在无限循环中停留的同一脚本的某些先前版本打开了文件。如果你有能力杀死所有的ASP.NET脚本,它可能会修复它。