我需要有关如何锁定文件、复制文件、修改副本以及将副本保存回原始文件的帮助,而原始文件仍处于锁定状态。
这是当前流程:用户打开文件,应用程序将其复制到临时文件夹中并使用以下行锁定原始文件
_lockStream = new FileStream(Path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
然后在将临时文件保存回原始文件时,目前我正在使用以下例程(目标 = _lockStream,源 = 临时文件的流):
public static void Copy(Stream source, Stream destination, int bufferSize)
{
int readed = 0;
byte[] buffer = new byte[bufferSize];
destination.SetLength(source.Length);
destination.Position = 0;
while ((readed = source.Read(buffer, 0, buffer.Length)) > 0)
{
destination.Write(buffer, 0, readed);
}
destination.Flush();
}
我更喜欢使用 File.Copy ,但我不知道如何使它与锁定的文件一起工作,即使文件被应用程序锁定。而且,更糟糕的是,我的方法不安全,如果应用程序或系统在中间崩溃,则原始文件已损坏。我认为更正确的方法是复制到同一个文件夹,然后移动(或只是移动),但我不知道如何保持对原始文件的锁定。
所以,现在为了安全起见,我释放文件锁,并使用 File.Copy,然后再次获取锁。它可以工作,但是文件在几毫秒内被解锁并且可以被其他进程锁定。
做这些事情的最佳方法是什么?