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. [SOLVED] Get extension of a file in Qt
Forum Update on Monday, May 27th 2025

[SOLVED] Get extension of a file in Qt

Scheduled Pinned Locked Moved General and Desktop
15 Posts 6 Posters 23.9k 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.
  • M Offline
    M Offline
    maximus
    wrote on last edited by
    #4

    @ashishbansal

    Another way would be to find the first position on the dot "."
    and take the right part as the extension


    Free Indoor Cycling Software - https://maximumtrainer.com

    A 1 Reply Last reply
    1
    • M maximus

      @ashishbansal

      Another way would be to find the first position on the dot "."
      and take the right part as the extension

      A Offline
      A Offline
      ashishbansal
      wrote on last edited by
      #5

      @maximus said:

      @ashishbansal

      Another way would be to find the first position on the dot "."
      and take the right part as the extension

      But that too is not gonna work. Like in foo.bar.tar.gz, extension is tar.gz but it would give me bar.tar.gz

      W 1 Reply Last reply
      0
      • M Offline
        M Offline
        maximus
        wrote on last edited by
        #6

        Usually what comes after the fist dot is the extension
        Do you really have filename named that way? I don't..


        Free Indoor Cycling Software - https://maximumtrainer.com

        A 1 Reply Last reply
        0
        • M maximus

          Usually what comes after the fist dot is the extension
          Do you really have filename named that way? I don't..

          A Offline
          A Offline
          ashishbansal
          wrote on last edited by
          #7

          @maximus said:

          Usually what comes after the fist dot is the extension
          Do you really have filename named that way? I don't..

          Yeah I have freedom-1.6.apk
          or many other android applications having this type of name.

          1 Reply Last reply
          0
          • M Offline
            M Offline
            maximus
            wrote on last edited by
            #8

            Can you show an actual file name (real) and what result you would like to get for the extension?
            Thanks


            Free Indoor Cycling Software - https://maximumtrainer.com

            A 1 Reply Last reply
            0
            • M maximus

              Can you show an actual file name (real) and what result you would like to get for the extension?
              Thanks

              A Offline
              A Offline
              ashishbansal
              wrote on last edited by
              #9

              @maximus said:

              Can you show an actual file name (real) and what result you would like to get for the extension?
              Thanks

              File name : freedom-1.6.apk
              Result: freedom-1.6

              Filename : data.tar.gz
              Result: data

              Filename: script.sh
              Result: script

              Filename: qt-everywhere-opensource-src-5.3.0.tar.xz
              Result: qt-everywhere-opensource-src-5.3.0

              I would like to get these result from the respective file names.

              Thanks
              Ashish Bansal

              M 1 Reply Last reply
              0
              • R Offline
                R Offline
                Rondog
                wrote on last edited by
                #10

                If you had a list of known file extensions that you could compare to you could eliminate the guesses. It would be really good if you could get this list from the OS registered system file types. The list should be sorted (longest first, shortest last).

                For example, your list might contain this:

                {
                .tar.gz
                .tar.xz
                .apk
                .txt
                .bat
                .sh
                }
                

                and your program might do this:

                for counter = 0 to size_of_list
                  if file_name.ends_with(extension_list[counter]) then
                    // found one
                  end if
                end for
                // if extension not found then resort to 'hackery'.
                

                That might be slow process if there are a lot of file extensions to check.

                Note: A file may not have an extension so looking for one might cause problems. Also, some files have a file name that begins with a dot (hidden files in GNU/Linux or Unix) and may or may not have an additional extension at the end.

                A 1 Reply Last reply
                1
                • A ashishbansal

                  @maximus said:

                  Can you show an actual file name (real) and what result you would like to get for the extension?
                  Thanks

                  File name : freedom-1.6.apk
                  Result: freedom-1.6

                  Filename : data.tar.gz
                  Result: data

                  Filename: script.sh
                  Result: script

                  Filename: qt-everywhere-opensource-src-5.3.0.tar.xz
                  Result: qt-everywhere-opensource-src-5.3.0

                  I would like to get these result from the respective file names.

                  Thanks
                  Ashish Bansal

                  M Offline
                  M Offline
                  maximus
                  wrote on last edited by
                  #11

                  @Rondog

                  Seem like QFileInfo could do the work.

                  Have you tried
                  QString QFileInfo::baseName () const
                  It should returns file name with longest extension removed (file.tar.gz -> file)


                  Free Indoor Cycling Software - https://maximumtrainer.com

                  1 Reply Last reply
                  0
                  • R Rondog

                    If you had a list of known file extensions that you could compare to you could eliminate the guesses. It would be really good if you could get this list from the OS registered system file types. The list should be sorted (longest first, shortest last).

                    For example, your list might contain this:

                    {
                    .tar.gz
                    .tar.xz
                    .apk
                    .txt
                    .bat
                    .sh
                    }
                    

                    and your program might do this:

                    for counter = 0 to size_of_list
                      if file_name.ends_with(extension_list[counter]) then
                        // found one
                      end if
                    end for
                    // if extension not found then resort to 'hackery'.
                    

                    That might be slow process if there are a lot of file extensions to check.

                    Note: A file may not have an extension so looking for one might cause problems. Also, some files have a file name that begins with a dot (hidden files in GNU/Linux or Unix) and may or may not have an additional extension at the end.

                    A Offline
                    A Offline
                    ashishbansal
                    wrote on last edited by
                    #12

                    @Rondog @maximus

                    Well I solved it by making use of QMimeDatabase. Thanks!

                    QMimeDatabase db;
                    QString name("file3.3.tar.gz");
                    int length = name.length();
                    QList <QPair <int, QMimeType> > list;
                    for (int i = length; i > -1; i--) {
                        QList<QMimeType> mimes = db.mimeTypesForFileName(name.section("", i, length));
                        QMimeType mime = mimes.isEmpty() ? QMimeType() : mimes.last();
                        if (mime.isValid() && (list.isEmpty() || list.last().second != mime)) {
                            list.insert(list.count(), qMakePair(i, mime));
                        }
                    }
                    if (!list.isEmpty()) {
                        qDebug() << list.last();
                    }
                    

                    As now I have i stored in list, I can take substring as answer.

                    1 Reply Last reply
                    0
                    • C Offline
                      C Offline
                      CodingCobra
                      wrote on last edited by
                      #13

                      Simply use QFileInfo.completeSuffix. This will return the extension.
                      Hope this helps

                      1 Reply Last reply
                      0
                      • A ashishbansal

                        @maximus said:

                        Have you checked QFileInfo

                        I think this can do it easily.
                        Good luck!

                        But that too splits the filename(both suffix and completeSuffix). If filename is foo.bar.tar.gz, I guess it is not gonna work.

                        KroMignonK Offline
                        KroMignonK Offline
                        KroMignon
                        wrote on last edited by
                        #14

                        @ashishbansal said in [SOLVED] Get extension of a file in Qt:

                        I guess it is not gonna work

                        Why of course QFileInfo::completeSuffix() is working! Do you have made a try before telling it don't?

                        QFileInfo fi("/tmp/archive.tar.gz");
                        QString ext = fi.completeSuffix();  // ext = "tar.gz"
                        

                        It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                        1 Reply Last reply
                        0
                        • A ashishbansal

                          @maximus said:

                          @ashishbansal

                          Another way would be to find the first position on the dot "."
                          and take the right part as the extension

                          But that too is not gonna work. Like in foo.bar.tar.gz, extension is tar.gz but it would give me bar.tar.gz

                          W Offline
                          W Offline
                          wrosecrans
                          wrote on last edited by
                          #15

                          @ashishbansal said in [SOLVED] Get extension of a file in Qt:

                          But that too is not gonna work. Like in foo.bar.tar.gz, extension is tar.gz but it would give me bar.tar.gz

                          Basically any library would have "bar.tar.gz" as the full extension for "foo.bar.tar.gz" -- there's nothing about the filename itself that makes bar and tar obviously distinct. So the only way to have tar.gz get picked out as special is try to try have a giant database of every possible file extension in the universe. And even if you had that, it would give unintuitive/inconsistent results tomorrow when somebody came out with a new one and it started seeing some but not others.

                          In practice, pretty much every general purpose library is just going to be splitting the name using generic rules.

                          1 Reply Last reply
                          0

                          • Login

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