В настоящее время я просто работаю с простыми текстовыми файлами.
Предложение 1. Используйте базу данных.
Предложение 2. Используйте файл блокировки.Используйте вызовы API уровня OS, чтобы открыть файл с эксклюзивной блокировкой.Первый пользователь, получивший этот файл, имеет эксклюзивный доступ к данным.Когда этот пользователь завершит транзакцию, закройте файл и снимите блокировку на уровне ОС.
Предложение 3. Не «обновляйте» файл.Журнал истории изменений.Затем вы можете прочитать имена пользователей и временные метки из журнала, чтобы найти последнюю версию.
Если вы делаете это, вам нужно, чтобы каждый запрос делал что-то вроде этого.
При получении текущего состояния прочитайте последнюю строку из файла.Кроме того, получите размер файла и время последней модификации.Сохраните размер и время последнего изменения в сеансе.Отобразите текущее состояние в форме.
Когда обрабатывается изменение пользователя, проверьте размер файла и время последнего изменения.Если файл отличается от того, что был записан в сеансе, этот пользователь пытается обновить данные, которые были изменены кем-то другим.Прочитайте последнюю строку из файла.Кроме того, получите размер файла и время последней модификации.Сохраните размер и время последнего изменения в сеансе.Отобразите текущее состояние в форме.
Кроме того, вам может потребоваться два файла.Один с «текущими» данными, другой с историей изменений.Это может ускорить поиск текущих данных, поскольку это единственная запись в файле текущего состояния.
Другой вариант заключается в том, чтобы в вашем файле был заголовок, представляющий собой блок текста фиксированного размера.Каждый раз, когда вы добавляете, вы также seek(0,0)
и обновляете заголовок со смещением к последней записи, а также с отметкой времени последнего изменения.