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非常有帮助。
典型的容易问题难以发现。
上述就是C#学习教程:File.Copy之后,另一个进程正在使用该文件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1004945.html