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. QStorageInfo not giving mount path
Forum Updated to NodeBB v4.3 + New Features

QStorageInfo not giving mount path

Scheduled Pinned Locked Moved Solved General and Desktop
14 Posts 4 Posters 2.8k Views 1 Watching
  • 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.
  • S Offline
    S Offline
    saber
    wrote on last edited by saber
    #1

    i have latest qt and i am in linux.

    this is my code.

        QStringList result;
        const auto allMounted = QStorageInfo::mountedVolumes();
        result.reserve(allMounted.size());
        for(auto& singleMounted : allMounted)
        result << singleMounted.displayName();
    
        for(int i=0; i<result.count(); ++i ){
            QString l;
            l = result.at(i);
            QStorageInfo(l).rootPath();
            qDebug()<<QStorageInfo(l).rootPath();
        }
    
        qDebug()<< allMounted;
        qDebug()<< result;
    
    

    here is the output

    "/run"
    "/"
    "/tmp"
    "/run/user/1000"
    ""
    ""
    ("/run", "/", "/tmp", "/run/user/1000", "Storage", "Fast")
    

    why i am not getting last 2 storage mount path ?

    i also want to remove ( "/run", "/tmp", "/run/user/1000") this three.

    so please tell me how.

    1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by mrjj
      #2

      Hi
      You could just use
      http://doc.qt.io/qt-5/qlist.html#removeAt
      and remove from list ?

      1 Reply Last reply
      1
      • S Offline
        S Offline
        saber
        wrote on last edited by
        #3

        and why i am not getting last 2 storage mount path ?

        mrjjM 1 Reply Last reply
        0
        • S saber

          and why i am not getting last 2 storage mount path ?

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #4

          @saber
          no idea. If you look in the linux - what are they ?
          maybe they dont have names at all and hence the empty strings.

          S 1 Reply Last reply
          0
          • mrjjM mrjj

            @saber
            no idea. If you look in the linux - what are they ?
            maybe they dont have names at all and hence the empty strings.

            S Offline
            S Offline
            saber
            wrote on last edited by
            #5

            @mrjj

            see the second debug output.

            last two is the name("Storage", "Fast"). but when i put them in here (QStorageInfo(l).rootPath() ) as "l" ,i am not getting the root path.

            mrjjM 1 Reply Last reply
            0
            • S saber

              @mrjj

              see the second debug output.

              last two is the name("Storage", "Fast"). but when i put them in here (QStorageInfo(l).rootPath() ) as "l" ,i am not getting the root path.

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #6

              @saber
              Maybe they are not rootPaths ?

              S 1 Reply Last reply
              0
              • mrjjM mrjj

                @saber
                Maybe they are not rootPaths ?

                S Offline
                S Offline
                saber
                wrote on last edited by saber
                #7

                @mrjj i found the solution

                QStringList result;
                    const auto allMounted = QStorageInfo::mountedVolumes();
                    result.reserve(allMounted.size());
                    for(auto& singleMounted : allMounted)
                    result << singleMounted.rootPath();
                
                    for(int i=0; i<result.count(); ++i ){
                        QString l = result.at(i);
                        if((l == "/run/user/1000" )| l == "/tmp" | l == "/run"){
                            result.removeAt(i);
                        }
                    }
                

                output

                ("/", "/run/user/1000", "/run/media/shaber/Storage", "/run/media/shaber/Fast")
                

                but this ("/run/user/1000") is not removed automatically .
                why is it ? and how to do remove it?

                aha_1980A 1 Reply Last reply
                0
                • S saber

                  @mrjj i found the solution

                  QStringList result;
                      const auto allMounted = QStorageInfo::mountedVolumes();
                      result.reserve(allMounted.size());
                      for(auto& singleMounted : allMounted)
                      result << singleMounted.rootPath();
                  
                      for(int i=0; i<result.count(); ++i ){
                          QString l = result.at(i);
                          if((l == "/run/user/1000" )| l == "/tmp" | l == "/run"){
                              result.removeAt(i);
                          }
                      }
                  

                  output

                  ("/", "/run/user/1000", "/run/media/shaber/Storage", "/run/media/shaber/Fast")
                  

                  but this ("/run/user/1000") is not removed automatically .
                  why is it ? and how to do remove it?

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

                  @saber said in QStorageInfo not giving mount path:

                  if((l == "/run/user/1000" )| l == "/tmp" | l == "/run"){
                  result.removeAt(i);
                  }

                  What happens if you replace that with:

                  if (l == "/run/user/1000" || l == "/tmp" || l == "/run") {
                    result.removeAt(i);
                  }
                  

                  Qt has to stay free or it will die.

                  S 1 Reply Last reply
                  0
                  • aha_1980A aha_1980

                    @saber said in QStorageInfo not giving mount path:

                    if((l == "/run/user/1000" )| l == "/tmp" | l == "/run"){
                    result.removeAt(i);
                    }

                    What happens if you replace that with:

                    if (l == "/run/user/1000" || l == "/tmp" || l == "/run") {
                      result.removeAt(i);
                    }
                    
                    S Offline
                    S Offline
                    saber
                    wrote on last edited by
                    #9

                    @aha_1980
                    nothing changed

                    ("/", "/run/user/1000", "/run/media/shaber/Storage")
                    

                    same.

                    is there any way to get just the mounted REAL partition .

                    aha_1980A 1 Reply Last reply
                    0
                    • S saber

                      @aha_1980
                      nothing changed

                      ("/", "/run/user/1000", "/run/media/shaber/Storage")
                      

                      same.

                      is there any way to get just the mounted REAL partition .

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

                      @saber: now I see it. if you use a debugger, you will notice the problem too.

                      you have a loop over x elements and compare element i against a pattern. if it matches, you remove the element.

                      But: therefore all following elements shift a position forward, which means you will miss the next element when the loop continues.

                      you can e.g. fix this by copying all wanted elements into a new list instead.

                      Regards

                      Qt has to stay free or it will die.

                      JonBJ 1 Reply Last reply
                      3
                      • aha_1980A aha_1980

                        @saber: now I see it. if you use a debugger, you will notice the problem too.

                        you have a loop over x elements and compare element i against a pattern. if it matches, you remove the element.

                        But: therefore all following elements shift a position forward, which means you will miss the next element when the loop continues.

                        you can e.g. fix this by copying all wanted elements into a new list instead.

                        Regards

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

                        @aha_1980
                        Rather than copying to a new list, the simplest pattern to use when removing items from a list via a for () loop counter so as not to worry about shifting is always to count downward! :

                        for (int i = result.count() - 1; i >= 0; --i )
                            if (...)
                                result.removeAt(i);
                        

                        will work :)

                        aha_1980A 1 Reply Last reply
                        0
                        • JonBJ JonB

                          @aha_1980
                          Rather than copying to a new list, the simplest pattern to use when removing items from a list via a for () loop counter so as not to worry about shifting is always to count downward! :

                          for (int i = result.count() - 1; i >= 0; --i )
                              if (...)
                                  result.removeAt(i);
                          

                          will work :)

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

                          @JonB

                          Rather then removing elements from a list he could just add the elements he really wants, by adding the check here

                          for(auto& singleMounted : allMounted)
                              result << singleMounted.rootPath();
                          

                          Sorry, could not resist ;)

                          Qt has to stay free or it will die.

                          JonBJ 1 Reply Last reply
                          0
                          • aha_1980A aha_1980

                            @JonB

                            Rather then removing elements from a list he could just add the elements he really wants, by adding the check here

                            for(auto& singleMounted : allMounted)
                                result << singleMounted.rootPath();
                            

                            Sorry, could not resist ;)

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

                            @aha_1980
                            Yes, but of course only works if you're copying/outputting the desired items somewhere. If you need to remove from a list, the downward pattern is worth knowing :)

                            1 Reply Last reply
                            0
                            • S Offline
                              S Offline
                              saber
                              wrote on last edited by saber
                              #14

                              my final solution

                               QStringList result;
                                  const auto allMounted = QStorageInfo::mountedVolumes();
                                  result.reserve(allMounted.size());
                                  for(auto& singleMounted : allMounted)
                                  result << singleMounted.rootPath();
                              
                              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