如何复制xlsx文件而不locking它的Excel

我目前正在尝试编写一个方法来复制文件,而不会阻止其他应用程序更改它们。 如果在阅读时有变化,我会再读一遍。

这个工作正常,当我在记事本中读取文件时更改它们。 但是,当我尝试在Excel 2010中保存文件时,我收到消息“{FileName}正在使用中,请稍后再试。”

我尝试使用.NET Framework 3.5和.NET Framework 4.0。

int partsToReadAtOnce = 5 * 1024 * 1024; bool fileChangedDuringWrite = false; using (FileStream readStr = new FileStream(srcPath, FileMode.Open, FileAccess.Read,FileShare.ReadWrite)) { using (FileStream writeStr = new FileStream(targetPath, FileMode.Create, FileAccess.Write,FileShare.None)) { do { DateTime srcWriteTimeBefore = new FileInfo(srcPath).LastWriteTime; writeStr.SetLength(0); readStr.Seek(0, SeekOrigin.Begin); byte[] curData = new byte[partsToReadAtOnce]; int len = 1; while ((len = readStr.Read(curData, 0, partsToReadAtOnce)) != 0) { writeStr.Write(curData, 0, len); } // break here and try to write to the file FileInfo srcInfo = new FileInfo(srcPath); FileInfo targetInfo = new FileInfo(targetPath); fileChangedDuringWrite = srcInfo.LastWriteTime.Ticks != srcWriteTimeBefore.Ticks || srcInfo.Length != targetInfo.Length; } while (fileChangedDuringWrite); } } 

简单的答案是,记事本不会locking文件(它将文件读入内存,而您编辑内存版本),而Excellocking文件

我不认为有保存以只读模式打开电子表格或创build副本的方法。

如果你需要复制我不认为你需要locking文件(我相信你可以打开只读)

你有没有尝试改变你的阅读?

编辑:啊,你有!

检查这个答案: 初学者Python:保存一个Excel文件,当它打开

它解决了同样的问题(似乎没有一个好的解决方法)

你可以把locking的文件放入一个列表中,并返回给他们。 没有理由不能处理exception,将文件放入队列中,继续处理其他文件,并在完成其他文件(延迟)后重新开始。

至less在这种情况下,用户在重新访问该文件时可能已经完成了该文件