[Interest] QFile/QDir: force move mode only?
Roland Hughes
roland at logikalsolutions.com
Sun May 12 16:00:01 CEST 2019
On 5/12/19 5:00 AM, interest-request at qt-project.org wrote:
> Hello,
>
> QFile/QDir rename function copies file in the case it's not possible to
> just move it.
>
> Is there a way to learn in advance what type of operation will occur?
>
> Let's suppose I have 10GB file. In case of copy, I would definitely like
> to use my own copy function and show UI with the progress of the operation.
>
> And of course I do not want to use my copy function always if the fast
> move is available.
You need to use a different class. Look around line 615 here
https://code.woboq.org/qt5/qtbase/src/corelib/io/qfile.cpp.html
// rename to final name
if (QFileSystemEngine::renameFile(tmp,
QFileSystemEntry(newName), error)) {
d->fileEngine->setFileName(newName);
d->fileName = newName;
return true;
}
The class can be found here:
https://code.woboq.org/qt5/qtbase/src/corelib/io/qfilesystemengine_p.h.html#QFileSystemEngine
That's how you can catch the rename failure then do your own thing on
copy. Be sure to read the comments in the file. If you will never be
"just changing case" of a file name and can control that, then only that
snippet should apply to you.
You might want to add a conditional compile and use part of this snippet
from around line 643 for the lesser platforms.
if (changingCase ? d->engine()->renameOverwrite(newName) :
d->engine()->rename(newName)) {
unsetError();
// engine was able to handle the new name so we just reset it
d->fileEngine->setFileName(newName);
d->fileName = newName;
return true;
}
That will be a bit more involved though.
--
Roland Hughes, President
Logikal Solutions
(630)-205-1593 (cell)
http://www.theminimumyouneedtoknow.com
http://www.infiniteexposure.net
http://www.johnsmith-book.com
More information about the Interest
mailing list