On 5/12/19 5:00 AM, interest-requ...@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

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to