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. QUrl::toLocalFile returns a path with an unexpected leading slash

QUrl::toLocalFile returns a path with an unexpected leading slash

Scheduled Pinned Locked Moved Solved General and Desktop
18 Posts 6 Posters 1.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.
  • J Online
    J Online
    J.Hilk
    Moderators
    wrote on 20 Sept 2022, 11:16 last edited by J.Hilk
    #8

    so I did some digging, QURL is actually explicitly handling cases with : in it:

    // magic for drives on windows
        if (deslashified.length() > 1 && deslashified.at(1) == QLatin1Char(':') && deslashified.at(0) != QLatin1Char('/')) {
            deslashified.prepend(QLatin1Char('/'));
        } else if (deslashified.startsWith(QLatin1String("//"))) {
            // magic for shared drive on windows
            int indexOfPath = deslashified.indexOf(QLatin1Char('/'), 2);
            url.setHost(deslashified.mid(2, indexOfPath - 2));
            if (indexOfPath > 2)
                deslashified = deslashified.right(deslashified.length() - indexOfPath);
            else
                deslashified.clear();
        }
    

    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


    Q: What's that?
    A: It's blue light.
    Q: What does it do?
    A: It turns blue.

    J 1 Reply Last reply 20 Sept 2022, 11:19
    0
    • J J.Hilk
      20 Sept 2022, 11:16

      so I did some digging, QURL is actually explicitly handling cases with : in it:

      // magic for drives on windows
          if (deslashified.length() > 1 && deslashified.at(1) == QLatin1Char(':') && deslashified.at(0) != QLatin1Char('/')) {
              deslashified.prepend(QLatin1Char('/'));
          } else if (deslashified.startsWith(QLatin1String("//"))) {
              // magic for shared drive on windows
              int indexOfPath = deslashified.indexOf(QLatin1Char('/'), 2);
              url.setHost(deslashified.mid(2, indexOfPath - 2));
              if (indexOfPath > 2)
                  deslashified = deslashified.right(deslashified.length() - indexOfPath);
              else
                  deslashified.clear();
          }
      
      J Offline
      J Offline
      JonB
      wrote on 20 Sept 2022, 11:19 last edited by JonB
      #9

      @J-Hilk said in QUrl::toLocalFile returns a path with an unexpected leading slash:

      // magic for drives on windows
      deslashified.at(1) == QLatin1Char(':')

      Is this in Windows-only code or in code shared with Linux?

      I still wish we knew whether the OP is reporting this behaviour on Windows, on Linux, or non both, for clarity.

      J 1 Reply Last reply 20 Sept 2022, 11:20
      0
      • J JonB
        20 Sept 2022, 11:19

        @J-Hilk said in QUrl::toLocalFile returns a path with an unexpected leading slash:

        // magic for drives on windows
        deslashified.at(1) == QLatin1Char(':')

        Is this in Windows-only code or in code shared with Linux?

        I still wish we knew whether the OP is reporting this behaviour on Windows, on Linux, or non both, for clarity.

        J Online
        J Online
        J.Hilk
        Moderators
        wrote on 20 Sept 2022, 11:20 last edited by
        #10

        @JonB shared


        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

        J 1 Reply Last reply 20 Sept 2022, 11:23
        0
        • J J.Hilk
          20 Sept 2022, 11:20

          @JonB shared

          J Offline
          J Offline
          JonB
          wrote on 20 Sept 2022, 11:23 last edited by JonB
          #11

          @J-Hilk
          LOL, then it looks like it isn't treating : as it ought to be under Linux.... Don't try it with Linux relative pathnames starting with <something>:... because it does not look like it handles them correctly, rather it makes an assumption that it is somehow dealing with a pathname which emanates from Windows. I wonder whether it mentions this anywhere, as really this is "naughty" :)

          1 Reply Last reply
          0
          • J JonB
            20 Sept 2022, 10:10

            @lguyot said in QUrl::toLocalFile returns a path with an unexpected leading slash:

            On Ubuntu and Windows,

            Are you saying this is the result on both OSes? Linux should handle C:/... differently from Windows?

            L Offline
            L Offline
            lguyot
            wrote on 20 Sept 2022, 11:30 last edited by
            #12

            @JonB Thanks for your interest and your time.

            I apologize for the lack of clarity regarding the different OSes under scrutiny.

            The output is the same on both OSes, i.e., Ubuntu and Windows.
            But I am only concerned by what happens on Windows. This is the real use-case I am interested in.

            For Ubuntu, I am ready to accept that the output is correct (and I am not entirely sure of what the correct output should be).

            J 1 Reply Last reply 20 Sept 2022, 11:35
            1
            • L lguyot
              20 Sept 2022, 11:30

              @JonB Thanks for your interest and your time.

              I apologize for the lack of clarity regarding the different OSes under scrutiny.

              The output is the same on both OSes, i.e., Ubuntu and Windows.
              But I am only concerned by what happens on Windows. This is the real use-case I am interested in.

              For Ubuntu, I am ready to accept that the output is correct (and I am not entirely sure of what the correct output should be).

              J Offline
              J Offline
              JonB
              wrote on 20 Sept 2022, 11:35 last edited by JonB
              #13

              @lguyot
              OK then, let's just forget about the Linux case because it just sidelines the issue.

              @kkoehne reports:

              qDebug() << QUrl::fromLocalFile("C:/images/DJI_0069.JPG").toLocalFile();
              "C:/images/DJI_0069.JPG"

              under " both Qt 5.15 and Qt 6.3" (and I am guessing he means under Windows anyway?). You are reporting different on just this under your version and Windows (which I don't have)?

              J 1 Reply Last reply 20 Sept 2022, 11:39
              0
              • J JonB
                20 Sept 2022, 11:35

                @lguyot
                OK then, let's just forget about the Linux case because it just sidelines the issue.

                @kkoehne reports:

                qDebug() << QUrl::fromLocalFile("C:/images/DJI_0069.JPG").toLocalFile();
                "C:/images/DJI_0069.JPG"

                under " both Qt 5.15 and Qt 6.3" (and I am guessing he means under Windows anyway?). You are reporting different on just this under your version and Windows (which I don't have)?

                J Online
                J Online
                J.Hilk
                Moderators
                wrote on 20 Sept 2022, 11:39 last edited by
                #14

                @JonB said in QUrl::toLocalFile returns a path with an unexpected leading slash:

                under " both Qt 5.15 and Qt 6.3" (and I am guessing he means under Windows anyway?). You are reporting different on just this under your version and Windows (which I don't have)?

                I can't confirm that, 5.15.10 results in:
                "/C:/images/DJI_0069.JPG" - macOS
                C:/images/DJI_0069.JPG- Windows


                Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                Q: What's that?
                A: It's blue light.
                Q: What does it do?
                A: It turns blue.

                M 1 Reply Last reply 20 Sept 2022, 12:18
                0
                • J J.Hilk
                  20 Sept 2022, 11:39

                  @JonB said in QUrl::toLocalFile returns a path with an unexpected leading slash:

                  under " both Qt 5.15 and Qt 6.3" (and I am guessing he means under Windows anyway?). You are reporting different on just this under your version and Windows (which I don't have)?

                  I can't confirm that, 5.15.10 results in:
                  "/C:/images/DJI_0069.JPG" - macOS
                  C:/images/DJI_0069.JPG- Windows

                  M Offline
                  M Offline
                  mpergand
                  wrote on 20 Sept 2022, 12:18 last edited by
                  #15

                  @J-Hilk said in QUrl::toLocalFile returns a path with an unexpected leading slash:

                  "/C:/images/DJI_0069.JPG" - macOS

                  /c: is non sense on mac
                  internaly ':' is the folder separator

                  if you put : in a file name, it will be converted to /

                  QString path=QDir::homePath();
                  QDir dir(path);
                  dir.mkdir("My:Folder");
                  

                  will create a folder in the user directory named "My/Folder"
                  In the Terminal the path looks like that:

                  /Users/me/My\:Folder
                  
                  J J 2 Replies Last reply 20 Sept 2022, 12:26
                  0
                  • M mpergand
                    20 Sept 2022, 12:18

                    @J-Hilk said in QUrl::toLocalFile returns a path with an unexpected leading slash:

                    "/C:/images/DJI_0069.JPG" - macOS

                    /c: is non sense on mac
                    internaly ':' is the folder separator

                    if you put : in a file name, it will be converted to /

                    QString path=QDir::homePath();
                    QDir dir(path);
                    dir.mkdir("My:Folder");
                    

                    will create a folder in the user directory named "My/Folder"
                    In the Terminal the path looks like that:

                    /Users/me/My\:Folder
                    
                    J Offline
                    J Offline
                    JonB
                    wrote on 20 Sept 2022, 12:26 last edited by JonB
                    #16

                    @mpergand
                    So actually you are showing that Mac behaves like Linux and creates the path as-is, with a :. You cannot have "a folder [...] named "My/Folder" in a Linux file system (which I understand is what Mac uses), / is not a legal character in a single path element under Linux. You seem to show that Mac's "interface" chooses to display a : in a path element as a / character when it "pretty-prints" it for the user, for some purpose?

                    In any case, the OP reports his issue is under Windows and that is all he cares about.

                    1 Reply Last reply
                    0
                    • M mpergand
                      20 Sept 2022, 12:18

                      @J-Hilk said in QUrl::toLocalFile returns a path with an unexpected leading slash:

                      "/C:/images/DJI_0069.JPG" - macOS

                      /c: is non sense on mac
                      internaly ':' is the folder separator

                      if you put : in a file name, it will be converted to /

                      QString path=QDir::homePath();
                      QDir dir(path);
                      dir.mkdir("My:Folder");
                      

                      will create a folder in the user directory named "My/Folder"
                      In the Terminal the path looks like that:

                      /Users/me/My\:Folder
                      
                      J Online
                      J Online
                      J.Hilk
                      Moderators
                      wrote on 20 Sept 2022, 12:28 last edited by J.Hilk
                      #17

                      @mpergand : is valid in the “unix layer”, but it is translated to/from / in the “Mac layers” (i.e. Finder, most file-related dialogs, etc.)
                      The colon is used as the separator in “HFS paths” and the slash is used as the separator in “POSIX paths” so there is a two-way translation depending on which “layer” you are working with

                      From smarter people than me


                      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                      Q: What's that?
                      A: It's blue light.
                      Q: What does it do?
                      A: It turns blue.

                      M 1 Reply Last reply 20 Sept 2022, 12:38
                      1
                      • J J.Hilk
                        20 Sept 2022, 12:28

                        @mpergand : is valid in the “unix layer”, but it is translated to/from / in the “Mac layers” (i.e. Finder, most file-related dialogs, etc.)
                        The colon is used as the separator in “HFS paths” and the slash is used as the separator in “POSIX paths” so there is a two-way translation depending on which “layer” you are working with

                        From smarter people than me

                        M Offline
                        M Offline
                        mpergand
                        wrote on 20 Sept 2022, 12:38 last edited by
                        #18

                        @J-Hilk said in QUrl::toLocalFile returns a path with an unexpected leading slash:

                        The colon is used as the separator in “HFS paths” and the slash is used as the separator in “POSIX paths” so there is a two-way translation

                        It is like that since the begining of OSX

                        1 Reply Last reply
                        1

                        17/18

                        20 Sept 2022, 12:28

                        • Login

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