复制文件时C#,允许其他进程独占锁定文件?

时间:2012-06-21 08:48:01

标签: c# file copy readonly fileshare

我正在复制我们oracle server的存档文件,我正在阻止发生的文件是在我复制文件服务器时尝试更新文件时会出错。< / p>

起初我试过

File.Copy(source, Destination, true);

但似乎这个方法是锁定文件,服务器在日志中抛出一个错误:

OSD-04002: unable to open file
O/S-Error: (OS 32) The process cannot access the file because it is being used by another process.

我将方法改为

FileStream rStream = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

但是当我尝试使用FileShare的测试程序打开文件时。现在它还会抛出一个错误,即另一个进程正在锁定文件。

一旦其他进程想要访问/写入文件,是否可以放弃或释放文件?

1 个答案:

答案 0 :(得分:1)

怎么样

var stream = System.IO.File.Open(
                 source, System.IO.FileMode.Open, System.IO.FileAccess.Read
             );

这会锁定文件吗?

最好的解决方案是使用VSS来防止锁定(你的服务器是一个Windows框,对吗?)

  • 创建快照
  • 从快照中复制文件
  • 删除快照

您可以使用.NET

自动执行此操作

http://www.codeproject.com/Articles/22745/Volume-Shadow-Copies-from-NET