Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QTemporaryFile: file not being created in Qt 5.11/5.12
QtWS25 Last Chance

QTemporaryFile: file not being created in Qt 5.11/5.12

Scheduled Pinned Locked Moved Unsolved General and Desktop
22 Posts 7 Posters 2.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • AritzA Offline
    AritzA Offline
    Aritz
    wrote on last edited by Aritz
    #1

    We have some tests implemented which use QTemporaryFile. We've found that some tests fail when upgrading from Qt 5.9.8 to Qt 5.11.3, if QTemporaryFile#fileName() doesn't get called after calling QTemporaryFile#open(). We use Xubuntu 16.04 for development.

    Basically, this is the simplest test case:

    TEST(tempFileTest, test1)
    
    {
    
       QTemporaryFile temp;
    
       ASSERT_TRUE(temp.open());
    
       ASSERT_TRUE(temp.exists()); //Fails here
    
    }
    
    TEST(tempFileTest, test2)
    
    {
    
       QTemporaryFile temp;
    
       ASSERT_TRUE(temp.open());
    
       temp.fileName();
    
       ASSERT_TRUE(temp.exists());
    
      //Passes
    }
    
    K 1 Reply Last reply
    0
    • AritzA Aritz

      We have some tests implemented which use QTemporaryFile. We've found that some tests fail when upgrading from Qt 5.9.8 to Qt 5.11.3, if QTemporaryFile#fileName() doesn't get called after calling QTemporaryFile#open(). We use Xubuntu 16.04 for development.

      Basically, this is the simplest test case:

      TEST(tempFileTest, test1)
      
      {
      
         QTemporaryFile temp;
      
         ASSERT_TRUE(temp.open());
      
         ASSERT_TRUE(temp.exists()); //Fails here
      
      }
      
      TEST(tempFileTest, test2)
      
      {
      
         QTemporaryFile temp;
      
         ASSERT_TRUE(temp.open());
      
         temp.fileName();
      
         ASSERT_TRUE(temp.exists());
      
        //Passes
      }
      
      K Offline
      K Offline
      koahnig
      wrote on last edited by
      #2

      @Aritz
      This is a user forum and it is not monitored for bug reports.

      You can check on https://bugreports.qt.io/secure/Dashboard.jspa if it is a bug and it has been reported.
      If it is not reported yet, you can file a bug report. Please report here the bug number.

      Vote the answer(s) that helped you to solve your issue(s)

      1 Reply Last reply
      1
      • AritzA Offline
        AritzA Offline
        Aritz
        wrote on last edited by Aritz
        #3

        Reported as QTBUG-80157. Thanks

        1 Reply Last reply
        1
        • Christian EhrlicherC Offline
          Christian EhrlicherC Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on last edited by
          #4

          I don't see it as bug here - a temporary file may not exist on the disk at all so exists() may return false. As soon as you call fileName() you force Qt to create a file on disk and it exists there.

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          K 1 Reply Last reply
          1
          • Christian EhrlicherC Christian Ehrlicher

            I don't see it as bug here - a temporary file may not exist on the disk at all so exists() may return false. As soon as you call fileName() you force Qt to create a file on disk and it exists there.

            K Offline
            K Offline
            koahnig
            wrote on last edited by
            #5

            @Christian-Ehrlicher

            That is disputable.

            According to the documentation of bool QTemporaryFile::open(QIODevice::OpenMode flags) it says:
            Creates a unique file name for the temporary file, and opens it. You can get the unique name later by calling fileName(). The file is guaranteed to have been created by this function (i.e., it has never existed before).

            For the open used in the code bool QTemporaryFile::open() it states only:
            A QTemporaryFile will always be opened in QIODevice::ReadWrite mode, this allows easy access to the data in the file. This function will return true upon success and will set the fileName() to the unique filename used.

            Also there seems to be a change in functionality between versions according to the first post.

            Vote the answer(s) that helped you to solve your issue(s)

            1 Reply Last reply
            1
            • Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by
              #6

              @koahnig said in QTemporaryFile: file not being created in Qt 5.11:

              That is disputable.

              Then please discuss this on the LKML, O_TMPFILE, when supported, doesn't create visible directory entry. As soon as you want it to be visible (= calling fileName()) this changes. See also e.g. here: http://man7.org/linux/man-pages/man2/open.2.html

              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
              Visit the Qt Academy at https://academy.qt.io/catalog

              sierdzioS 1 Reply Last reply
              1
              • Christian EhrlicherC Christian Ehrlicher

                @koahnig said in QTemporaryFile: file not being created in Qt 5.11:

                That is disputable.

                Then please discuss this on the LKML, O_TMPFILE, when supported, doesn't create visible directory entry. As soon as you want it to be visible (= calling fileName()) this changes. See also e.g. here: http://man7.org/linux/man-pages/man2/open.2.html

                sierdzioS Offline
                sierdzioS Offline
                sierdzio
                Moderators
                wrote on last edited by
                #7

                @Christian-Ehrlicher said in QTemporaryFile: file not being created in Qt 5.11:

                @koahnig said in QTemporaryFile: file not being created in Qt 5.11:

                That is disputable.

                Then please discuss this on the LKML, O_TMPFILE, when supported, doesn't create visible directory entry. As soon as you want it to be visible (= calling fileName()) this changes. See also e.g. here: http://man7.org/linux/man-pages/man2/open.2.html

                That's fine and I agree with that.

                But, if it worked one way in Qt 5.9 and works in a different way in 5.11, then it's a regression - so definitely a bug and also a high priority one.

                (Z(:^

                AritzA 1 Reply Last reply
                0
                • sierdzioS sierdzio

                  @Christian-Ehrlicher said in QTemporaryFile: file not being created in Qt 5.11:

                  @koahnig said in QTemporaryFile: file not being created in Qt 5.11:

                  That is disputable.

                  Then please discuss this on the LKML, O_TMPFILE, when supported, doesn't create visible directory entry. As soon as you want it to be visible (= calling fileName()) this changes. See also e.g. here: http://man7.org/linux/man-pages/man2/open.2.html

                  That's fine and I agree with that.

                  But, if it worked one way in Qt 5.9 and works in a different way in 5.11, then it's a regression - so definitely a bug and also a high priority one.

                  AritzA Offline
                  AritzA Offline
                  Aritz
                  wrote on last edited by
                  #8

                  @sierdzio They closed my bug report as invalid. This is affecting Qt 5.12.6 also, BTW.

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    Hi,

                    Can you post the link to the bug report ?

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    AritzA 1 Reply Last reply
                    0
                    • SGaistS SGaist

                      Hi,

                      Can you post the link to the bug report ?

                      AritzA Offline
                      AritzA Offline
                      Aritz
                      wrote on last edited by
                      #10

                      @SGaist https://bugreports.qt.io/browse/QTBUG-80157

                      1 Reply Last reply
                      0
                      • JonBJ Offline
                        JonBJ Offline
                        JonB
                        wrote on last edited by JonB
                        #11

                        I have read both sides of this: the bug report + Qt documentation, and the Linux open docs for O_TMPFILE. I can see both sides of the argument, and of course understand that Qt wants to use the OS facility.

                        I admit I have not tried it, but how does, say, Qt docs stating stuff like

                        The file name of the temporary file can be found by calling fileName().
                        A temporary file will have some static part of the name and some part that is calculated to be unique.
                        and will be placed into the temporary path as returned by QDir::tempPath().

                        marry with the O_TMPFILE docs of

                        Create an unnamed temporary regular file
                        (2) can never be reached via any pathname
                        (4) do not require the caller to devise unique names

                        I am also intrigued that apparently the implementation has changed from Qt 5.9 to 5.11, I wonder why now.

                        It's easy for me to say, but some hints in the Qt docs about this possible behaviour might be welcome. I fully understand that it is not Qt's job to document everything which might be going on under each platform, but there are other precedents in the docs which do give the user a clue about platform-specific behaviour, or what to expect/not expect....

                        1 Reply Last reply
                        0
                        • Christian EhrlicherC Offline
                          Christian EhrlicherC Offline
                          Christian Ehrlicher
                          Lifetime Qt Champion
                          wrote on last edited by
                          #12

                          The support for O_TMPFILE was added in 5.10 and there was even a big changelog entry for this: https://code.qt.io/cgit/qt/qtbase.git/tree/dist/changes-5.10.0/?h=v5.10.0

                          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                          Visit the Qt Academy at https://academy.qt.io/catalog

                          sierdzioS 1 Reply Last reply
                          5
                          • Christian EhrlicherC Christian Ehrlicher

                            The support for O_TMPFILE was added in 5.10 and there was even a big changelog entry for this: https://code.qt.io/cgit/qt/qtbase.git/tree/dist/changes-5.10.0/?h=v5.10.0

                            sierdzioS Offline
                            sierdzioS Offline
                            sierdzio
                            Moderators
                            wrote on last edited by
                            #13

                            @Christian-Ehrlicher said in QTemporaryFile: file not being created in Qt 5.11/5.12:

                            The support for O_TMPFILE was added in 5.10 and there was even a big changelog entry for this: https://code.qt.io/cgit/qt/qtbase.git/tree/dist/changes-5.10.0/?h=v5.10.0

                            Great, thanks for the link.

                            I'd still say there should be a note about this in Qt docs for Qt >5.10. Many other such OS "curiosities" are mentioned in the docs.

                            (Z(:^

                            1 Reply Last reply
                            0
                            • Christian EhrlicherC Offline
                              Christian EhrlicherC Offline
                              Christian Ehrlicher
                              Lifetime Qt Champion
                              wrote on last edited by
                              #14

                              @sierdzio said in QTemporaryFile: file not being created in Qt 5.11/5.12:

                              I'd still say there should be a note about this in Qt docs

                              Feel free to provide a patch ;)

                              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                              Visit the Qt Academy at https://academy.qt.io/catalog

                              sierdzioS 1 Reply Last reply
                              1
                              • Christian EhrlicherC Christian Ehrlicher

                                @sierdzio said in QTemporaryFile: file not being created in Qt 5.11/5.12:

                                I'd still say there should be a note about this in Qt docs

                                Feel free to provide a patch ;)

                                sierdzioS Offline
                                sierdzioS Offline
                                sierdzio
                                Moderators
                                wrote on last edited by
                                #15

                                @Christian-Ehrlicher said in QTemporaryFile: file not being created in Qt 5.11/5.12:

                                @sierdzio said in QTemporaryFile: file not being created in Qt 5.11/5.12:

                                I'd still say there should be a note about this in Qt docs

                                Feel free to provide a patch ;)

                                Oh I wish, but no time right now.

                                I'll bookmark this, though and hopefully come back with a patch some day.

                                (Z(:^

                                aha_1980A 1 Reply Last reply
                                0
                                • sierdzioS sierdzio

                                  @Christian-Ehrlicher said in QTemporaryFile: file not being created in Qt 5.11/5.12:

                                  @sierdzio said in QTemporaryFile: file not being created in Qt 5.11/5.12:

                                  I'd still say there should be a note about this in Qt docs

                                  Feel free to provide a patch ;)

                                  Oh I wish, but no time right now.

                                  I'll bookmark this, though and hopefully come back with a patch some day.

                                  aha_1980A Offline
                                  aha_1980A Offline
                                  aha_1980
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #16

                                  @sierdzio

                                  I'll bookmark this, though and hopefully come back with a patch some day.

                                  Too late :) But you can review the patch: https://codereview.qt-project.org/c/qt/qtbase/+/282081

                                  Qt has to stay free or it will die.

                                  JonBJ 1 Reply Last reply
                                  2
                                  • sierdzioS Offline
                                    sierdzioS Offline
                                    sierdzio
                                    Moderators
                                    wrote on last edited by
                                    #17

                                    Great, thanks! Looks good. I may be lacking some powers as I don't see any +1 button I can click.

                                    (Z(:^

                                    1 Reply Last reply
                                    0
                                    • SGaistS Offline
                                      SGaistS Offline
                                      SGaist
                                      Lifetime Qt Champion
                                      wrote on last edited by
                                      #18

                                      It's in the dialog you get when you hit the Reply button.

                                      Interested in AI ? www.idiap.ch
                                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                      1 Reply Last reply
                                      1
                                      • sierdzioS Offline
                                        sierdzioS Offline
                                        sierdzio
                                        Moderators
                                        wrote on last edited by
                                        #19

                                        Ah OK found it under REPLY. That gerrit UI...

                                        (Z(:^

                                        1 Reply Last reply
                                        1
                                        • aha_1980A aha_1980

                                          @sierdzio

                                          I'll bookmark this, though and hopefully come back with a patch some day.

                                          Too late :) But you can review the patch: https://codereview.qt-project.org/c/qt/qtbase/+/282081

                                          JonBJ Offline
                                          JonBJ Offline
                                          JonB
                                          wrote on last edited by
                                          #20

                                          @aha_1980
                                          Whoever made that doc change (you? some bot?!), it's perfect!

                                          aha_1980A 1 Reply Last reply
                                          1

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved