文件正被File.Copy之后的另一个进程使用
本文关键字:另一个 进程 之后 File Copy 文件 | 更新日期: 2023-09-27 18:26:43
我正在尝试管理web应用程序中的文件。有时,我必须在文件夹中创建一个文件(使用file.Copy):
File.Copy(@oldPath, @newPath);
几秒钟后,该文件可能会被删除:
if (File.Exists(@newPath)) {
File.Delete(@newPath);
}
然而,我不知道为什么在file.Copy.file.Delete之后,新文件仍然被服务器进程(IIS,w3wp.exe)阻止。我得到了异常:
"进程无法访问该文件,因为它正被另一个过程。"
根据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真的很有帮助。
典型的容易发现的问题。