2014-12-30 2 views
0

Описание проблемы


Я использую .NET v3.5 Compact Framework для разработки приложения на C# для мобильного устройства. В настоящее время у меня есть две программы, которые используются пользователем для чтения или записи данных (или из) и XML-файла. Проблема заключается в том, когда я пытаюсь открыть файл из любой из двух программ, а затем попытаюсь манипулировать файлом с помощью другой программы.C# Compact Framework - Управление файлами из двух разных программ

Что происходит?

XML-файл читается и анализируется обеими программами. В этот момент они становятся двумя отдельными объектами в памяти. Оба набора данных изменяются в какой-то момент в ходе выполнения программ. Программа № 1 сохраняет изменения. Программа №2 также сохраняет изменения, но не будет иметь изменений в программе №1.

Что мне делать? Какие-либо предложения???

Мне нужна помощь в решении этой проблемы. Должен ли я объединить две программы в одно и то же решение? Как мне подойти к двум отдельным программам, управляющим одним и тем же файлом, и обновлению данных друг друга?

+0

Итак, вы хотите поделиться данными между двумя программами? Описывает ли информация о программе то, что делает другая программа? – lucrativelucas

+0

@lucrativelucas Да, это так. Они оба извлекают информацию из того же файла, и когда одно значение меняет свойство (пример) a, я хочу, чтобы программа сохранила свойство a и заставила другую программу обновлять изменения. –

ответ

1

a) использовать файл блокировки seprate, если один процесс обращается к файлу для записи b) использовать новый процесс, который является единственным интерфейсом xml. Используйте некоторый метод interprocess для управления данными xml (т. Е. С помощью сокетов). c) отказаться от использования xml для данных и использовать многопользовательскую систему транзакций, такую ​​как SQLite.

Я бы пошел с c)

+0

Несчастная причина, по которой я не могу использовать параметр «С», заключается в том, что очень немногие пользователи программы не имеют доступа к интернет-соединению. Мне нравится вариант «B», хотя и чувствую, что этот ответ имеет гораздо большую глубину. Спасибо. –

+0

Использование SQLite не требует подключения к Интернету. SQLite - очень маленькая система данных только для SQL-файлов. – josef

0

Периодически изучайте файл (либо когда ваше приложение получает фокус ввода, либо по таймеру, либо непосредственно перед перезаписью файла), чтобы увидеть, изменилось ли содержимое. Если это так, программе необходимо перезагрузить файл и слить изменения с активным объектом в памяти. Конфликты могут быть возможны (т. Е. Другая программа изменила часть объекта, которая также была изменена вашей программой), поэтому вам нужно будет проверить их и предпринять соответствующие действия, независимо от того, предупреждает ли пользователь или просто разрешает более недавние изменить.

Лучший способ обнаружения изменений будет зависеть от того, как структурированы ваши данные и могут ли уникальные элементы вашего XML-файла идентифицироваться. К сожалению, это не простая задача, если вы еще не написали код сравнения.

+0

Я ценю вашу помощь и руководство. Спасибо. –