File.Copy之后,另一个进程正在使用该文件

我正在尝试管理我的Web应用程序中的文件。 有时,我必须在文件夹中创建一个文件(使用File.Copy):

File.Copy(@oldPath, @newPath); 

几秒钟后,该文件可能会被删除:

 if (File.Exists(@newPath)) { File.Delete(@newPath); } 

但是,我不知道为什么新文件在File.Copy之后仍然被服务器进程(IIS,w3wp.exe)阻止。 在File.Delete之后我得到了exception:

“该进程无法访问该文件,因为它正由另一个进程使用。”

根据Api,File.Copy不会阻止文件,是吗?

我试图释放资源,但它没有奏效。 我该如何解决这个问题?

更新:确实,使用Process Explorer,IIS进程阻止了该文件。 我试图实现复制代码以手动释放资源,但问题仍然存在:

  public void copy(String oldPath, String newPath) { FileStream input = null; FileStream output = null; try { input = new FileStream(oldPath, FileMode.Open); output = new FileStream(newPath, FileMode.Create, FileAccess.ReadWrite); byte[] buffer = new byte[32768]; int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { output.Write(buffer, 0, read); } } catch (Exception e) { } finally { input.Close(); input.Dispose(); output.Close(); output.Dispose(); } } 

您可以尝试使用Process Explorer查找打开文件句柄的应用程序。 如果Process Explorer找不到,请使用Process Monitor跟踪尝试访问该文件的进程。

这可能是由文件索引器或反病毒软件引起的,这些软件通常会扫描所有新文件。

文件被另一个进程阻止,我没有意识到它。 Process Explorer非常有帮助。

典型的容易问题难以发现。