Чтение двоичного непрерывно меняющегося файла в windows

У меня проблемы с чтением изменяемого файла в течение всего срока службы приложения. Я не могу загрузить изменения после записи в файл, если я не остановлю и не перезапущу приложение. Он отлично работает в OSX, но не в Windows.

Вот одноэлементный класс:

StoreManager::StoreManager() {
   // Verify that the version of the library that we linked against is
   //   // compatible with the version of the headers we compiled against.
   GOOGLE_PROTOBUF_VERIFY_VERSION;

  // file = "data.db";
  // // Read the existing data.
  input = fstream(file, ios::in | ios::binary);
  if (!input) { 
      input.close();
      cout << file << ": File not found. Creating a new file." << endl;
      fstream output(file, ios::out | ios::trunc | ios::binary);
      if (!output)
          cout << file << ": Failed to create a new file" << endl;
      else{
          appData.SerializeToOstream(&output);
          output.close();
          cout << file << ": New empty file created " << endl;
      }

      input = fstream(file, ios::in | ios::binary);
      if (!input) { 
          cout << file << ": File not found. Failed to creating a new file." << endl;
      }
  } 

  if (!appData.ParseFromIstream(&input)) {
      cerr << "Failed to parse in date storage." << endl;
  } 
}

AppData* StoreManager::getData() {
  return &appData;
}

void StoreManager::save(){
  // Write back to disk.
  fstream output(file, ios::out | ios::trunc | ios::binary);
  if (!appData.SerializeToOstream(&output)) {
     cerr << "Failed to write in date storage." << endl;
  }
  output.close();
}

Ожидал: Для ясности: при изменении потока и последующем вызове save () я должен увидеть изменения, примененные в appData.

Фактическая ошибка (ошибка только в Windows): Мои данные остаются неизменными до того момента, как я закрою и снова открою приложение. затем я вижу ранее сохраненные изменения.

Любая помощь будет принята с благодарностью.

Похоже, что вы анализируете файл только один раз (когда синглтон создается впервые) ...

Max Langhof 10.08.2018 15:12

Не могли бы вы быть более конкретными, чем «проблемы» и «не могу»? Что происходит, чего не должно происходить, или чего не должно происходить?

molbdnilo 10.08.2018 15:19

Рассматривали ли вы периодическое закрытие, а затем повторное открытие дескриптора файла?

Owl 10.08.2018 16:02

@MaxLanghof этого должно быть достаточно, и он отлично работает на OSX. Ошибка в Windows

MUH Mobile Inc. 10.08.2018 21:00
0
4
51
0

Другие вопросы по теме