C# 文件正在被另一个进程.NET使用

C# 文件正在被另一个进程.NET使用,c#,.net,asp.net,file-io,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();

我需要创建/附加一个文本文件,并在其中写入一些数据。当我将下面的代码写入我的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();
}

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


如果不是,那么它可能意味着其他脚本,或者同一脚本的某个以前版本被卡在无限循环中,文件被打开了。如果您可以杀死所有ASP.NET脚本,它可能会修复它。

如果另一个进程对您想要的文件具有独占锁定,您几乎无能为力,只能强制删除该文件的所有句柄或杀死该进程,这两者都将导致未定义的行为(由具有独占锁的其他程序执行)

你也应该

  • 等待其他程序完成使用该文件
  • 写入另一个文件
  • 其他一些有意义的东西
  • 如果您确定只有您的代码访问此文件,只需返回并确保在处理完之前打开的文件后关闭该文件的所有句柄


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

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

    if (!File.Exists(""))
    {            
        StreamWriter sr =  File.CreateText("");
        sr.Close();
    }
    
    请从中查看此示例。 这将向您展示如何创建文本文件

    或者,您可以用这种方式创建文本文件;下面的代码来自MSDN

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

    如果您正在另一个进程中使用该文件,请尝试在之前释放它。并在打开该文件(读或写)之前声明意向锁。这可能会有所帮助。
    sw.Close()
    我相信是不需要的,因为您的StreamWriter处于使用块中。首先要做的是找出哪个进程持有锁(或者可能是哪个流程)。在他发布的代码中,StreamWriter处于使用块中,并且显式关闭。你能看到他的前两行代码吗?当文件不存在时,他试图在其中创建文件。顺便说一句,这段代码经过测试。@Tim;看看MSDN中的这个示例,知道了。看到了,但没有发现细微差别。如果文件不存在,他的代码将被删除当它进入使用块时使用它(由于文件.CreateText)。很抱歉造成混淆。您可能希望编辑您的答案,使其更清楚地了解您所说的内容。很好。