2012-01-23 2 views
0

Я хочу иметь возможность писать XML-файл с XmlTextWriter или LINQ to XML, но, кстати, я не хочу, чтобы файл был полностью заблокирован. Я хочу, чтобы другие процессы могли читать Xml-файл. Он должен быть заблокирован только в режиме записи, так что другие могут не изменять файл. Каков наилучший способ достичь этого?XmlWriter в режиме без блокировки

+6

Я не знаю, как добиться того, что вы просите ... НО Я настоятельно рекомендую вам пересмотреть свой подход, поскольку большинство синтаксических анализаторов XML НЕ подходят для обработки XML-файлов, которые меняются при чтении ... с потенциально серьезными последствиями , – Yahia

+2

Кстати, вы не хотите напрямую использовать XmlTextWriter. Если вам нужно использовать XmlWriter, вам следует использовать XmlWriter.Create для его создания. –

ответ

5

Вам нужно установить это при открытии FileStream. Попробуйте это:

var fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read); 
var xmlWriter = XmlWriter.Create(fs); 

Как отмечает Яхья, нет никакой гарантии, что данные, записанные в любой момент будет иметь смысл для читателя.

+0

Я хочу, чтобы просто другое приложение, разработанное мной, сможет получить доступ к файлу с определенной частотой, чтобы постоянно обновлять обновленный файл, который также обновляется с определенной частотой. –

+0

Пока данные в файле имеют смысл в то время, когда вы его читаете, вы должны быть в порядке с этим. Убедитесь, что вы вызываете fs.Flush() после каждой записи или данные еще не записываются на диск. –

+0

@ClaudioFerraro: Я не думаю, что вы понимаете, что говорят Крис и Яхия. Недопустимый XML-код не может быть проанализирован, и вы не можете в любой момент гарантировать, что структура будет действительна. Чтение блокировок - это самая простая и наименьшая из ваших проблем. –

Смежные вопросы