【发布时间】:2014-03-18 19:08:45
【问题描述】:
我目前正在尝试编写一种复制文件而不阻止其他应用程序更改文件的方法。如果阅读时有变化,我会再读一遍。
当我在读取记事本中更改文件时,这可以正常工作。但是当我尝试在 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);
}
}
【问题讨论】: