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

本文关键字:错误 报告 删除 文件夹 | 更新日期: 2023-09-27 18:22:47

进程无法访问该文件,因为它正被另一个进程使用

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

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

错误告诉您,文件已被使用,无法删除。所以没什么错。由于您没有制定真正的问题,让我们试着用以下方式来帮助你们。

我想只有你的程序在使用报告,所以很好,你屏蔽了报告在其他地方。

例如,以下代码

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

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

例如,出于测试目的,您可以安装SysInternalhttp://technet.microsoft.com/en-us/sysinternals/bb896655.aspx并在您的文件。删除语句。然后你会看到,什么过程使用文件:

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