Автосохранение файлов с несколькими экземплярами

Я пишу программу на Qt / C ++, которая выполняет длительное моделирование, и для защиты от потери данных я написал несколько простых действий по автосохранению. Программа периодически сохраняет во временный каталог пользователя (используя QDir :: temp ()), и, если программа закрывается изящно, этот файл удаляется. Если программа запускается и видит файл в этом каталоге, она предполагает, что предыдущий экземпляр потерпел крах или был принудительно завершен, и предлагает пользователю загрузить его.

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

Моя программа для Windows / Mac / Linux, так что бы лучше всего реализовать это с использованием Qt или иным образом в кроссплатформенной манере?

Редактировать:
В комментариях предлагалось использовать идентификатор процесса, который я могу получить с помощью QCoreApplication :: applicationPid (). Мне нравится эта идея, но когда программа загружает и видит файл с определенным PID в имени, как она может посмотреть на другие запущенные экземпляры (если они есть), чтобы увидеть, есть ли совпадение?

1

Решение

Вы можете просто использовать QSaveFile который, как указано в документации:

Класс QSaveFile предоставляет интерфейс для безопасной записи в файлы.

QSaveFile — это устройство ввода-вывода для записи текстовых и двоичных файлов без потери существующих данных в случае сбоя операции записи.

Во время записи содержимое будет записано во временный файл, и если ошибки не произошло, commit () переместит его в конечный файл. Это гарантирует, что никакие данные в конечном файле не будут потеряны в случае возникновения ошибки во время записи, а частично записанный файл никогда не будет присутствовать в конечном местоположении. Всегда используйте QSaveFile при сохранении целых документов на диск.

Что касается нескольких экземпляров, вам просто нужно отразить это в имени файла.

0

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


По вопросам рекламы [email protected]