Mercurial > hg > svcore
diff base/TempWriteFile.cpp @ 1359:1c9bbbb6116a 3.0-integration
Use W64 instead of WAV for decoded files; use Ogg reader in preference to WAV one for Ogg files (WAV reader works, via libsndfile, but doesn't load metadata); fix Ogg reader to use QFile open instead of non-Win32-compatible API; add more encoder tests, audio writer test, midi reader test
author | Chris Cannam |
---|---|
date | Tue, 10 Jan 2017 10:58:25 +0000 |
parents | e802e550a1f2 |
children | 48e9f538e6e9 |
line wrap: on
line diff
--- a/base/TempWriteFile.cpp Mon Jan 09 18:51:42 2017 +0000 +++ b/base/TempWriteFile.cpp Tue Jan 10 10:58:25 2017 +0000 @@ -27,7 +27,7 @@ temp.setAutoRemove(false); temp.open(); // creates the file and opens it atomically if (temp.error()) { - cerr << "TempWriteFile: Failed to create temporary file in directory of " << m_target << ": " << temp.errorString() << endl; + SVCERR << "TempWriteFile: Failed to create temporary file in directory of " << m_target << ": " << temp.errorString() << endl; throw FileOperationFailed(temp.fileName(), "creation"); } @@ -54,13 +54,17 @@ { if (m_temp == "") return; - QDir dir(QFileInfo(m_temp).dir()); - // According to http://doc.trolltech.com/4.4/qdir.html#rename - // some systems fail, if renaming over an existing file. - // Therefore, delete first the existing file. - if (dir.exists(m_target)) dir.remove(m_target); - if (!dir.rename(m_temp, m_target)) { - cerr << "TempWriteFile: Failed to rename temporary file " << m_temp << " to target " << m_target << endl; + QFile tempFile(m_temp); + QFile targetFile(m_target); + + if (targetFile.exists()) { + if (!targetFile.remove()) { + SVCERR << "TempWriteFile: WARNING: Failed to remove existing target file " << m_target << " prior to moving temporary file " << m_temp << " to it" << endl; + } + } + + if (!tempFile.rename(m_target)) { + SVCERR << "TempWriteFile: Failed to rename temporary file " << m_temp << " to target " << m_target << endl; throw FileOperationFailed(m_temp, "rename"); }