c#复制/移动到锁定的文件/流中
我需要有关如何锁定文件、复制文件、修改副本以及将副本保存回原始文件的帮助,同时原始文件保持锁定状态 以下是当前的流程: 用户打开文件,应用程序将其复制到临时文件夹中,并用以下行锁定原始文件c#复制/移动到锁定的文件/流中,c#,file,stream,locking,C#,File,Stream,Locking,我需要有关如何锁定文件、复制文件、修改副本以及将副本保存回原始文件的帮助,同时原始文件保持锁定状态 以下是当前的流程: 用户打开文件,应用程序将其复制到临时文件夹中,并用以下行锁定原始文件 _lockStream = new FileStream(Path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read); 然后,在将临时文件保存回原始文件时,当前我使用以下例程(destination=_lockStream,source=temp文件
_lockStream = new FileStream(Path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
然后,在将临时文件保存回原始文件时,当前我使用以下例程(destination=_lockStream,source=temp文件的流):
我更喜欢使用File.Copy,但我不知道如何使它与锁定的文件一起工作,即使该文件已被应用程序锁定。
更糟糕的是,我的方法是不安全的,如果应用程序或系统在中间崩溃,原始文件就损坏了。我认为更正确的方法是复制到同一个文件夹,然后移动(或者只是简单地移动),但我不知道如何保持对原始文件的锁定
所以,现在为了安全起见,我释放文件锁,使用file.Copy,然后再次获得锁。它可以工作,但在几毫秒内,文件被解锁,并且可以被其他进程锁定
做这些事情的最佳方法是什么?为了使您的方法安全,您可以像这样使用TransactionScope:
using(var scope = new TransactionScope())
{
Copy(source, destination, buffersize);
scope.Complete();
}
这是行不通的。当我在调试器中的copy方法中停止并退出时,目标流将被部分覆盖。
using(var scope = new TransactionScope())
{
Copy(source, destination, buffersize);
scope.Complete();
}