2

我目前正在复制我们的存档文件oracle server,我正在阻止发生的事情是,当我复制文件服务器时,它会在尝试更新文件时出错。

起初我试过

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 的测试程序打开文件时。现在它也抛出一个错误,另一个进程正在锁定文件。

一旦另一个进程想要访问/写入文件,是否可以放手或释放文件?

4

1 回答 1

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

于 2012-06-21T09:02:57.797 回答