diff --git a/src/core/qsavefile.cpp b/src/core/qsavefile.cpp index bddf18c97..287f9e8e2 100644 --- a/src/core/qsavefile.cpp +++ b/src/core/qsavefile.cpp @@ -46,6 +46,12 @@ #include #include +#ifdef Q_OS_WIN +# include +#else +# include +#endif + QSaveFilePrivate::QSaveFilePrivate() : tempFile(0), error(QFile::NoError) { @@ -283,7 +289,15 @@ bool QSaveFile::commit() qWarning("QSaveFile::commit: File (%s) is not open", qPrintable(fileName())); return false; } - QIODevice::close(); // flush and close + flush(); +#ifdef Q_OS_WIN + FlushFileBuffers(reinterpret_cast(handle())); +#elif defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 + fdatasync(d->tempFile->handle()); +#else + fsync(d->tempFile->handle()); +#endif + QIODevice::close(); if (d->error != QFile::NoError) { d->tempFile->remove(); unsetError();