diff --git a/src/App/Document.cpp b/src/App/Document.cpp index 58ec6a0b3b..f56dafa9be 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -1724,10 +1724,10 @@ void Document::Save (Base::Writer &writer) const writer.incInd(); - // NOTE: DO NOT save the main string hasher as separate file, because it is - // required by many objects, which assume the string hasher is fully - // restored. - d->Hasher->setPersistenceFileName(0); + if (writer.isForceXML()) + d->Hasher->setPersistenceFileName(0); + else + d->Hasher->setPersistenceFileName("StringHasher.Table"); for (auto o : d->objectArray) o->beforeSave(); diff --git a/src/App/StringHasher.cpp b/src/App/StringHasher.cpp index 388892abd7..31131915ec 100644 --- a/src/App/StringHasher.cpp +++ b/src/App/StringHasher.cpp @@ -405,7 +405,7 @@ void StringHasher::Save(Base::Writer &writer) const { void StringHasher::SaveDocFile (Base::Writer &writer) const { std::size_t count = _hashes->SaveAll?this->size():this->count(); - writer.Stream() << count << '\n'; + writer.Stream() << "StringTableStart v1 " << count << '\n'; saveStream(writer.Stream()); } @@ -515,7 +515,7 @@ void StringHasher::RestoreDocFile (Base::Reader &reader) { restoreStreamNew(reader, count); return; } - reader >> count; + count = atoi(marker.c_str()); restoreStream(reader,count); }