Чтение файла без отказа в доступе к другим процессам

Я думал о создании небольшого специализированного приложения для резервного копирования, похожего на недавно введенную историю файлов в Windows 8. Основная идея — сканировать некоторые каталоги каждые N часов на наличие измененных файлов и копировать их на другой том. Проблема заключается в том, что некоторые другие приложения могут запрашивать доступ к этим файлам во время их резервного копирования и получать отказ в доступе, что может привести к всевозможным неприятным проблемам.

Я, насколько я могу судить, есть несколько подходов к этой проблеме:

1) Использование сервиса Volume Shadow Copy

С моей точки зрения, будущее этой вещи неясно, и это накладные расходы при высоких нагрузках ввода-вывода может нанести вред системе.

2) Использование режима общего доступа при открытии файлов

Нечто подобное в основном работает …

using (var stream = new FileStream("test.txt", FileMode.Open, FileAccess.Read,
FileShare.Delete | FileShare.ReadWrite | FileShare.Read | FileShare.Write))
{
[Copy data]
}

… пока какой-то другой процесс не запросит доступ к тому же файлу без FileShare.Read, после чего будет сгенерировано исключение IOException.

3) Использование Оппортунистический замок это может быть «сломано» другими (написать?) запросами.

это Поведение FileIO.ReadTextAsync выглядит точно так же, как я хочу, но оно также выглядит очень специфичным для реализации и может быть изменено в будущем. Кто-нибудь знает, как явно заблокировать файл локально через C # или C ++?

Может быть, есть какой-то простой метод C #, такой как File.TryReadBytes, который обеспечивает такое «вежливое» чтение? Я заинтересован в решениях, которые будут работать на Windows 7 и выше.

0

Решение

Мой голос за VSS. Основная причина в том, что он не мешает другим процессам, изменяющим ваши файлы, таким образом, он обеспечивает согласованность. Возможное несоответствие в значительной степени побеждает цель резервного копирования. API стабильный, и я не буду беспокоиться о его будущем.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector