Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. General talk
  3. Brainstorm
  4. [Solved] Duplicate finder
Forum Updated to NodeBB v4.3 + New Features

[Solved] Duplicate finder

Scheduled Pinned Locked Moved Brainstorm
40 Posts 6 Posters 19.4k 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.
  • A Offline
    A Offline
    alex.dadaev
    wrote on last edited by
    #14

    how can i make QString from QFileInfoList ?
    is there any possibilities to do that?

    1 Reply Last reply
    0
    • G Offline
      G Offline
      giesbert
      wrote on last edited by
      #15

      QFileInfo::path() ???

      Nokia Certified Qt Specialist.
      Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

      1 Reply Last reply
      0
      • G Offline
        G Offline
        goetz
        wrote on last edited by
        #16

        No.

        QFileInfoList is a typedef for QList<QFileInfo>.

        You know how many properties a QFileInfo object describing a single file has, don't you?

        If you want a single string from these big bunch of information you will have to construct it yourself.

        http://www.catb.org/~esr/faqs/smart-questions.html

        1 Reply Last reply
        0
        • G Offline
          G Offline
          giesbert
          wrote on last edited by
          #17

          Ok, forgpot to add the iteration by for(...)...

          Nokia Certified Qt Specialist.
          Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

          1 Reply Last reply
          0
          • A Offline
            A Offline
            alex.dadaev
            wrote on last edited by
            #18

            but how can i construct a path of a single file?

            1 Reply Last reply
            0
            • G Offline
              G Offline
              goetz
              wrote on last edited by
              #19

              Read the docs on "QFileInfo":http://doc.qt.nokia.com/stable/qfileinfo.html - we did it too. Everything you need is documented there. Yes, it takes some 5 minutes to read it all through, but if you're too lazy we can't help you. If you have concrete questions or problems with any of the methods, ask them.

              http://www.catb.org/~esr/faqs/smart-questions.html

              1 Reply Last reply
              0
              • G Offline
                G Offline
                giesbert
                wrote on last edited by
                #20

                If you read the documentation, you would find it ...

                @
                QFileInfoList list;
                for(int i = 0; i < list.size(); ++i)
                {
                QString filePath = list[i].absoluteFilePath();
                {
                @

                Nokia Certified Qt Specialist.
                Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  alex.dadaev
                  wrote on last edited by
                  #21

                  i've made it by myself already :) the reason why i ask so dumb questions is because i'm just starting using Qt and programming itself and i just want not to make stupid mistakes.
                  @QString path[list.size()];for (int i = 0; i < list.size(); ++i) {
                  QFileInfo fileInfo = list.at(i);
                  path[i] = fileInfo.path();}@

                  1 Reply Last reply
                  0
                  • G Offline
                    G Offline
                    giesbert
                    wrote on last edited by
                    #22

                    I would suggest using a QStringList instead of QString path[xx];

                    Nokia Certified Qt Specialist.
                    Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                    1 Reply Last reply
                    0
                    • G Offline
                      G Offline
                      goetz
                      wrote on last edited by
                      #23

                      First: Then show us your code and we comment on it; Don't ask dumb questions that are clearly answered in the very good API docs the Trolls have created for us. It is very likely that you will not get any answer (apart from "RTFM"). We all put some valuable amount of time into DevNet to answer questions - with that silly game you are stealing this time!

                      Second: Do not use C-Style arrays in C++ if you are not absolutely forced to. Use the fine "Container Classes":http://doc.qt.nokia.com/stable/containers.html of Qt (or the equivalents of C++ standard library or boost). In your case "QStringList":http://doc.qt.nokia.com/stable/qstringlist.html is what you want.

                      Third: C-Style arrays of unknown size at compile time are not supported by all compilers and therefore not portable. I leave you to google or bing to search for the details.

                      http://www.catb.org/~esr/faqs/smart-questions.html

                      1 Reply Last reply
                      0
                      • I Offline
                        I Offline
                        ixSci
                        wrote on last edited by
                        #24

                        Don't you think a hash computation is a little bit overkilling in the file duplicate determination?
                        Just read your files' contents into memory blocks and compare them with memcmp. If you may have big files it would be wiser to compare them block-by-block rather then the whole files at once.

                        Upd. function name

                        1 Reply Last reply
                        0
                        • G Offline
                          G Offline
                          giesbert
                          wrote on last edited by
                          #25

                          memcpy copies in memory and does not compare them.

                          AFAIK, he wanted to search for duplicates, so hashes would be faster. YOu don't want to do a full compare for all files with all files....

                          Nokia Certified Qt Specialist.
                          Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                          1 Reply Last reply
                          0
                          • I Offline
                            I Offline
                            ixSci
                            wrote on last edited by
                            #26

                            Gerolf, thank you for the function name correction.
                            And yes, you are right about the question. I've misinterpreted OP goal :)

                            1 Reply Last reply
                            0
                            • A Offline
                              A Offline
                              alex.dadaev
                              wrote on last edited by
                              #27

                              How do you think, is it correct?
                              @
                              while(it.hasNext())
                              {
                              it.next();
                              if(it.peekPrevious().key()==it.peekNext().key())
                              std::cout<<it.peekPrevious().value()<<"="
                              <<it.peekNext().value()<<std::endl;
                              }
                              @

                              1 Reply Last reply
                              0
                              • G Offline
                                G Offline
                                goetz
                                wrote on last edited by
                                #28

                                No it is not correct.

                                It compares only adjacent entries in your container.

                                If your container is a map (QMap or QHash) and you use insert() to populate it then you will get no duplicates at all, since every key occurs only once, hence the keys at different positions are all distinct.

                                You must use insertMulti() and values() to get a list of all entries with the same hash value. Or use QMultiMap/QMultiHash with the before mentioned methods.

                                http://www.catb.org/~esr/faqs/smart-questions.html

                                1 Reply Last reply
                                0
                                • A Offline
                                  A Offline
                                  alex.dadaev
                                  wrote on last edited by
                                  #29

                                  Yes, you're right, thanks

                                  1 Reply Last reply
                                  0
                                  • A Offline
                                    A Offline
                                    alex.dadaev
                                    wrote on last edited by
                                    #30

                                    i can't understand why it's not working :(
                                    @
                                    while(it.hasNext())
                                    {
                                    it.next();
                                    if(it.key()==it.peekNext().key()) {
                                    std::cout << "i've got you" << std::endl;
                                    }
                                    }
                                    @

                                    PS: i've used insertMulti() to add item to hash, as you said

                                    1 Reply Last reply
                                    0
                                    • A Offline
                                      A Offline
                                      alex.dadaev
                                      wrote on last edited by
                                      #31

                                      maybe like this?
                                      @int compare_flag;

                                      while(it.hasNext())
                                      {
                                          it.next();
                                          compare_flag = QString::compare(it.key(),it.peekNext().key(),Qt::CaseSensitive);
                                                         if(compare_flag==0) {
                                              std::cout << "i've got you" << std::endl;
                                          }
                                      }@
                                      
                                      1 Reply Last reply
                                      0
                                      • G Offline
                                        G Offline
                                        goetz
                                        wrote on last edited by
                                        #32

                                        The keys in a (hash) map are always distinct. You will never find two identical keys so your comparison will never be true.

                                        And even if you had identical keys in your container you would only find them if they are adjacent in the list.

                                        But I'm going to have a kind of déjà-vu...

                                        To make things clearer for us to understand: You do have a multi hash/multi map. What do you put in there and what do you expect to come out?

                                        http://www.catb.org/~esr/faqs/smart-questions.html

                                        1 Reply Last reply
                                        0
                                        • A Offline
                                          A Offline
                                          alex.dadaev
                                          wrote on last edited by
                                          #33

                                          @QHash<QString,int> FilesHash;@
                                          QString key is MD5
                                          int value - just a number of file

                                          on output i want to see the names of similar files

                                          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