当我尝试从文件夹中删除报告时出现此错误

时间:2014-09-18 12:42:20

标签: c# asp.net

该进程无法访问该文件,因为该文件正由另一个进程

使用
private void DeleteReport()    
{
      int invid = Convert.ToInt32(Session["InvId"]);    
      string FileName = invid + "_Report" + ".pdf";    
      string path1 = Server.MapPath("~/Report/" + FileName);    
      if (File.Exists(path1))   
      {   
          File.Delete(path1);    
      }
}

1 个答案:

答案 0 :(得分:0)

错误告诉您,该文件已被使用且无法删除。所以没有错。因为你没有制定一个 真实的问题,让我们尝试以下列方式帮助您。

我想只有您的程序正在使用该报告,所以可能会阻止报告 在其他地方。

例如,以下代码

string path = "C:\\Temp\\test.txt";
FileStream file = File.Open(path, FileMode.OpenOrCreate);
if (File.Exists(path))
  File.Delete(path);

引发同样的错误。这并不一定意味着该过程是另一个过程。

您可以做的是,例如,为了测试目的,安装SysInternal http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx并在您的附近添加以下代码 File.Delete语句。然后你会看到,使用该文件的进程是什么:

try
{
  File.Delete(path);
}
catch (Exception)
{
  using (Process tool = new Process())
  {
    tool.StartInfo.FileName = @"C:\Program Files (x86)\SysinternalsSuite\handle.exe"; //Your path
    tool.StartInfo.Arguments = path + " /accepteula";
    tool.StartInfo.UseShellExecute = false;
    tool.StartInfo.RedirectStandardOutput = true;
    tool.Start();
    tool.WaitForExit();
    string outputTool = tool.StandardOutput.ReadToEnd();

    string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)";
    foreach (Match match in Regex.Matches(outputTool, matchPattern))
    {
      Process p = Process.GetProcessById(int.Parse(match.Value));
      MessageBox.Show(p.ProcessName); // OR LOG IT
    }
  }

  throw;
}        

对handle.exe调用https://stackoverflow.com/a/1263609/2707156

的信用