我目前正在尝试编写一种复制文件的方法,而不会阻止其他应用程序更改它们。如果在阅读时有变化,我会再次阅读。
当我在读取时更改记事本中的文件时,这可以正常工作。但是当我尝试在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);
}
}
答案 0 :(得分:0)
简单的答案是,记事本不会锁定文件(它将文件读入内存并编辑内存中的版本),而Excel会锁定文件
我认为无法以只读模式打开电子表格或创建副本。
如果你需要复制,我认为你不需要锁定文件(我确定你可以打开只读)
您是否尝试过更改您的阅读权限?
编辑:啊,是的,你有!
检查此答案:Beginner Python: Saving an excel file while it is open
它解决了同样的问题(似乎没有一个好的解决方法)
您可以将锁定的文件放入列表中并返回给他们。没有理由你无法处理异常,将文件放入队列,继续使用其他文件并在完成其余文件后再次回到起点(延迟)。
至少这样,当你再次访问时,用户可能已经完成了文件