如何在另一个进程正在使用时复制文件是否可以同时复制另一个进程正在使用的文件?我问是因为当我尝试使用以下代码复制文件时,会抛出异常:System.IO.File.Copy(s,destFile,true);引发的异常是:进程无法访问文件“D:temp1000000045.zip”,因为它正被另一个进程使用。我不想创建新文件,我只想复制或删除它。是否可以?举个例子(注意:我只是合并了两个谷歌搜索结果,你可能需要修复一些小错误;))打开FileStream时,重要的部分是FileShare.ReadWrite。我使用类似的代码打开和阅读Excel文档,但excel仍然会打开并阻止该文件。使用(varinputFile=newFileStream(“oldFile.txt”,FileMode.Open,FileAccess.Read,FileShare.ReadWrite)){使用(varoutputFile=newFileStream(“newFile.txt”,FileMode.Create)){varbuffer=新字节[0x10000];整数字节;while((bytes=inputFile.Read(buffer,0,buffer.Length))>0){outputFile.Write(buffer,0,bytes);}}}由Windows创建如果计算机上的其他进程读取和/或写入锁定文件的副本,最简单(也可能是唯一)的解决方案是使用卷影复制服务(VSS)。卷影复制服务很复杂,很难从托管代码中调用。幸运的是,一些好人已经创建了一个.NET类库来做到这一点。查看CodePlex上的AlphaVSS项目:http://alphavss.codeplex.com。编辑与CodePlex上的许多项目一样,AlphaVSS已迁移到GitHub。该项目现在在这里:https://github.com/alphaleonis/AlphaVSS。您应该探索并找出哪个进程正在阻止该文件。如果流程不属于你,那也解决不了问题。当然,您可以应用一些hack并手动释放文件锁,但这种方法最有可能导致意想不到的后果。如果该进程属于您,请尝试解锁文件或使用共享读取权限锁定它。[编辑]找出阻塞进程的最简单方法是使用ProcessExplorer。启动它并在Find->FindHandleorDLL...对话框中输入文件名。在搜索结果中,您将能够看到哪个进程正在阻止您的文件。您也可以在C#中完成这项工作Check:Whatprocessislockingthefile?.不,你不能。某些程序不会锁定文件以供读取,但如果锁定,则在不杀死其他程序的情况下无法访问该文件。那么,另一种选择是使用Process类复制锁定的文件并调用CMD以使用“复制”命令。在大多数情况下,“复制”命令将能够制作文件的副本,即使它正在被另一个进程使用,绕过C#File.Copy问题。示例:以上为C#学习教程:如何在其他进程使用文件时复制该文件共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注—try{File.Copy(somefile)}catch(IOExceptione){if(e.Message.Contains("in使用")){Process.StartInfo.UseShellExecute=false;Process.StartInfo.RedirectStandardOutput=true;Process.StartInfo.FileName="cmd.exe";Process.StartInfo.Arguments="/Ccopy""+yourlockedfile+""""+destination+""";流程.开始();Console.WriteLine(Process.StandardOutput.ReadToEnd());过程。等待退出();Process.Close();}}应该在你当前的try/catch之上加上try/catch来处理fileinuseexception,让你的代码继续...如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
