С# при копировании файла разрешить другому процессу монопольную блокировку файла?

В настоящее время я копирую архивные файлы нашего 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. Теперь выдает ошибку, что другой процесс блокирует файл.

Можно ли отпустить или освободить файл, когда другой процесс захочет получить к нему доступ/записать?


person Tom    schedule 21.06.2012    source источник


Ответы (1)


что о

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

Это блокирует файл?

Лучшим решением было бы использовать VSS для предотвращения блокировки (ваш сервер — это Windows Box, верно?)

  • создать снимок
  • скопировать файлы из снапшота
  • удалить снимок

Вы можете автоматизировать это с помощью .NET

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

person Jürgen Steinblock    schedule 21.06.2012
comment
да, я попробовал код, который вы разместили, и он все еще блокирует файл, попробую VSS (но это немного сложно), думал, может быть, есть другое решение. Кстати, я использую filewatcher, поскольку файлы создаются и модифицируются, а затем копируются после обновления. - person Tom; 21.06.2012
comment
Кроме того, файловый наблюдатель и программа копирования работают на другом сервере. Архивные файлы с сервера оракула - это просто картографический диск, доступный только для чтения. Могу ли я запустить vss на картографическом диске с другого сервера? Я думаю, мне нужно читать более подробно. - person Tom; 22.06.2012
comment
Это может быть хорошей отправной точкой technet.microsoft.com/en-us/library. /ee923636.aspx Посмотрите на ссылку Shadow Copies of Shared Folders, я не читал дальше, но это звучит многообещающе. Вы можете использовать WMI, который, я полагаю, будет работать и на удаленных серверах: technet.microsoft.com/en-us/library/cc787108(v=ws.10).aspx - person Jürgen Steinblock; 22.06.2012
comment
большое спасибо за большую помощь SchlaWiener, до сих пор FileShare.ReadWrite работает с архивными файлами оракула. Это не мешает писать в файл, даже если моя программа его читает (копирует по байтам), отслеживая уже пару дней, если что-то обязательно появится, я перейду к решению VSS. Я считаю это близким. - person Tom; 27.06.2012