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. Implement something like tar archive in windows environment
Forum Updated to NodeBB v4.3 + New Features

Implement something like tar archive in windows environment

Scheduled Pinned Locked Moved General and Desktop
47 Posts 8 Posters 11.2k Views 4 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #6

    Did you already build the module itself ?

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

    ZgemboZ 1 Reply Last reply
    0
    • SGaistS SGaist

      Did you already build the module itself ?

      ZgemboZ Offline
      ZgemboZ Offline
      Zgembo
      wrote on last edited by
      #7

      @SGaist No, I have just downloaded code from git, https://github.com/KDE/karchive but I do not know how to build it and include into my project.

      aha_1980A VRoninV 2 Replies Last reply
      0
      • ZgemboZ Zgembo

        @SGaist No, I have just downloaded code from git, https://github.com/KDE/karchive but I do not know how to build it and include into my project.

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

        @Zgembo

        you need CMake and then follow the instructions here: https://github.com/KDE/karchive/blob/master/INSTALL

        Qt has to stay free or it will die.

        1 Reply Last reply
        1
        • ZgemboZ Offline
          ZgemboZ Offline
          Zgembo
          wrote on last edited by
          #9

          I have found this tutorial online. It works as a charm.
          http://3adly.blogspot.com/2011/06/qt-folder-compression.html
          If you do not need compression, as I do not, you can just add second argument to qCompression function 0-means no compression.

          Tnx,
          Zgembo

          ZgemboZ 1 Reply Last reply
          2
          • ZgemboZ Zgembo

            @SGaist No, I have just downloaded code from git, https://github.com/KDE/karchive but I do not know how to build it and include into my project.

            VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by
            #10

            @Zgembo said in Implement something like tar archive in windows environment:

            No, I have just downloaded code from git, https://github.com/KDE/karchive but I do not know how to build it and include into my project.

            https://forum.qt.io/post/377923

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            1 Reply Last reply
            0
            • ZgemboZ Zgembo

              I have found this tutorial online. It works as a charm.
              http://3adly.blogspot.com/2011/06/qt-folder-compression.html
              If you do not need compression, as I do not, you can just add second argument to qCompression function 0-means no compression.

              Tnx,
              Zgembo

              ZgemboZ Offline
              ZgemboZ Offline
              Zgembo
              wrote on last edited by Zgembo
              #11

              @Zgembo Can someone look at the code on this link. When I try to compress larger files, few GB nothing happens.
              http://3adly.blogspot.com/2011/06/qt-folder-compression.html

              1 Reply Last reply
              0
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by VRonin
                #12

                Yes, that post uses qCompress(file.readAll()); so it has to load the entire file in memory and then uses a non-zip-compliant compression.

                My suggestion stands: use KArchive. You can find a pre-built version (updated as of 2018-12-14, will be deleted in 6months time) with all dependencies in the following links:

                • MSVC 2015 64 bit
                • MSVC 2015 32 bit
                • MinGW 32 bit (does not support bzip2)

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                ZgemboZ 1 Reply Last reply
                5
                • VRoninV VRonin

                  Yes, that post uses qCompress(file.readAll()); so it has to load the entire file in memory and then uses a non-zip-compliant compression.

                  My suggestion stands: use KArchive. You can find a pre-built version (updated as of 2018-12-14, will be deleted in 6months time) with all dependencies in the following links:

                  • MSVC 2015 64 bit
                  • MSVC 2015 32 bit
                  • MinGW 32 bit (does not support bzip2)
                  ZgemboZ Offline
                  ZgemboZ Offline
                  Zgembo
                  wrote on last edited by
                  #13

                  @VRonin said in Implement something like tar archive in windows environment:

                  Yes, that post uses qCompress(file.readAll()); so it has to load the entire file in memory and then uses a non-zip-compliant compression.

                  My suggestion stands: use KArchive. You can find a pre-built version (updated as of 2018-12-14, will be deleted in 6months time) with all dependencies in the following links:

                  • MSVC 2015 64 bit
                  • MSVC 2015 32 bit
                  • MinGW 32 bit (does not support bzip2)

                  Can I use it with MS Visual studio 2017, and if yes how can I include it in my project? Thank you.

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

                    Yes you can. You have to build the module with VS2017 first.

                    As for how to include it in your project, it's shown on the bottom left of the module documentation.

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

                    VRoninV ZgemboZ 2 Replies Last reply
                    2
                    • SGaistS SGaist

                      Yes you can. You have to build the module with VS2017 first.

                      As for how to include it in your project, it's shown on the bottom left of the module documentation.

                      VRoninV Offline
                      VRoninV Offline
                      VRonin
                      wrote on last edited by
                      #15

                      @SGaist said in Implement something like tar archive in windows environment:

                      You have to build the module with VS2017 first.

                      AFAIK MSVC2015 and MSVC2017 are binary compatible (for the first time ever in MSVC history) so you could try downloading and using the 2015 pre-compiled and go from there.

                      @Zgembo said in Implement something like tar archive in windows environment:

                      how can I include it in my project?

                      http://doc.qt.io/qt-5/third-party-libraries.html
                      http://doc.qt.io/qtcreator/creator-project-qmake-libraries.html

                      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                      ~Napoleon Bonaparte

                      On a crusade to banish setIndexWidget() from the holy land of Qt

                      1 Reply Last reply
                      4
                      • SGaistS SGaist

                        Yes you can. You have to build the module with VS2017 first.

                        As for how to include it in your project, it's shown on the bottom left of the module documentation.

                        ZgemboZ Offline
                        ZgemboZ Offline
                        Zgembo
                        wrote on last edited by
                        #16

                        @SGaist Hi, I have tried to build KArchive with Cmake-GUI, but it looks like I am mission extra cmake modules (ECM). I will try @VRonin suggestion to use prebuild libraries from his link. Thank you.

                        1 Reply Last reply
                        0
                        • ZgemboZ Offline
                          ZgemboZ Offline
                          Zgembo
                          wrote on last edited by
                          #17

                          @VRonin Hi, I have tried to add karchive libraries that I have downloaded from your link, but with out any success. I have used this link as a tutorial https://stackoverflow.com/questions/35008426/link-3rd-party-library-in-visual-studio .
                          When I try to compile my project I get the error: Cannot open include file: qplatformdefs.h: no such file or directory.

                          1 Reply Last reply
                          0
                          • VRoninV Offline
                            VRoninV Offline
                            VRonin
                            wrote on last edited by
                            #18

                            @Zgembo said in Implement something like tar archive in windows environment:

                            qplatformdefs.h

                            That's an additional include.

                            In Project > Properties > C/C++->General > Additional Include Directories
                            Click Edit, and enter the path to the directory where the file "qplatformdefs.h" is located

                            It is in the mkspecs folder of qt, something like: C:\Qt\5.12\msvc2015_64\mkspecs\win32-msvc

                            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                            ~Napoleon Bonaparte

                            On a crusade to banish setIndexWidget() from the holy land of Qt

                            ZgemboZ 1 Reply Last reply
                            1
                            • VRoninV VRonin

                              @Zgembo said in Implement something like tar archive in windows environment:

                              qplatformdefs.h

                              That's an additional include.

                              In Project > Properties > C/C++->General > Additional Include Directories
                              Click Edit, and enter the path to the directory where the file "qplatformdefs.h" is located

                              It is in the mkspecs folder of qt, something like: C:\Qt\5.12\msvc2015_64\mkspecs\win32-msvc

                              ZgemboZ Offline
                              ZgemboZ Offline
                              Zgembo
                              wrote on last edited by
                              #19

                              @VRonin it compiles. Now I have to find some examples of how to use just KArchive to create archive file without any compression.

                              1 Reply Last reply
                              0
                              • VRoninV Offline
                                VRoninV Offline
                                VRonin
                                wrote on last edited by VRonin
                                #20

                                from KArchive\examples\tarlocalfiles

                                /*  This file is part of the KDE project
                                    Copyright (C) 2013 Maarten De Meyer <de.meyer.maarten@gmail.com>
                                    You may use this file under the terms of the BSD license as follows:
                                    Redistribution and use in source and binary forms, with or without
                                    modification, are permitted provided that the following conditions
                                    are met:
                                    1. Redistributions of source code must retain the above copyright
                                      notice, this list of conditions and the following disclaimer.
                                    2. Redistributions in binary form must reproduce the above copyright
                                      notice, this list of conditions and the following disclaimer in the
                                      documentation and/or other materials provided with the distribution.
                                    THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                                    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                                    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                                    IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                                    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                                    NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                                    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                                    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                                    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                                    THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                                */
                                /*
                                 * TarLocalFiles
                                 * This example shows how to add local files and directories to a KArchive
                                 *
                                 * api: addLocalFile(fileName, destName)
                                 * api: addLocalDirectory(dirName, destName)
                                 *
                                 * Usage: ./tarlocalfiles <file-1> <file-n>
                                */
                                #include <QCoreApplication>
                                #include <QDir>
                                #include <QFileInfo>
                                #include <ktar.h>
                                int main(int argc, char *argv[])
                                {
                                    QCoreApplication app(argc, argv);
                                    QStringList files(app.arguments());
                                    // Create or open an archive
                                    KTar archive(QStringLiteral("myFiles.tar.gz"));
                                    // Prepare the archive for writing.
                                    if (!archive.open(QIODevice::WriteOnly)) {
                                        // Failed to open file.
                                        return 1;
                                    }
                                    if (files.size() <= 1) {
                                        // No files given.
                                        qWarning("Usage: ./tarlocalfiles <file>");
                                        return 1;
                                    }
                                    for (int i = 1; i < files.size(); ++i) {
                                        QFileInfo localFileOrDir(files.at(i));
                                        if (localFileOrDir.isFile()) {
                                            QString name = localFileOrDir.fileName();
                                            archive.addLocalFile(name, name);
                                        } else if (localFileOrDir.isDir()) {
                                            QString name = QDir(files.at(i)).dirName();
                                            // Add this folder and all its contents
                                            archive.addLocalDirectory(name, name);
                                        }
                                    }
                                    archive.close();
                                    return 0;
                                }
                                

                                If you want to compress it see KArchive\examples\bzip2gzip

                                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                                ~Napoleon Bonaparte

                                On a crusade to banish setIndexWidget() from the holy land of Qt

                                1 Reply Last reply
                                0
                                • ZgemboZ Offline
                                  ZgemboZ Offline
                                  Zgembo
                                  wrote on last edited by
                                  #21

                                  @VRonin Thank you for the example. I do not need to compress files. I just need to group few files to single archive (no compression) and to move it to another pc.

                                  jsulmJ 1 Reply Last reply
                                  0
                                  • ZgemboZ Zgembo

                                    @VRonin Thank you for the example. I do not need to compress files. I just need to group few files to single archive (no compression) and to move it to another pc.

                                    jsulmJ Offline
                                    jsulmJ Offline
                                    jsulm
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #22

                                    @Zgembo Take a look at documentation: https://api.kde.org/frameworks/karchive/html/classKTar.html
                                    Especially "A class for reading / writing (optionally compressed) tar archives."

                                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    ZgemboZ 1 Reply Last reply
                                    1
                                    • jsulmJ jsulm

                                      @Zgembo Take a look at documentation: https://api.kde.org/frameworks/karchive/html/classKTar.html
                                      Especially "A class for reading / writing (optionally compressed) tar archives."

                                      ZgemboZ Offline
                                      ZgemboZ Offline
                                      Zgembo
                                      wrote on last edited by
                                      #23

                                      @jsulm said in Implement something like tar archive in windows environment:

                                      @Zgembo Take a look at documentation: https://api.kde.org/frameworks/karchive/html/classKTar.html
                                      Especially "A class for reading / writing (optionally compressed) tar archives."

                                      Thank you for your replay. I am really stuck with this. I have examined this example https://github.com/KDE/karchive/blob/master/examples/tarlocalfiles/main.cpp but when I run this program it asks for bzip2.dll and two more.
                                      I really do not need to compress files. There is no example of using just KTar without compression.

                                      JonBJ VRoninV 2 Replies Last reply
                                      0
                                      • ZgemboZ Zgembo

                                        @jsulm said in Implement something like tar archive in windows environment:

                                        @Zgembo Take a look at documentation: https://api.kde.org/frameworks/karchive/html/classKTar.html
                                        Especially "A class for reading / writing (optionally compressed) tar archives."

                                        Thank you for your replay. I am really stuck with this. I have examined this example https://github.com/KDE/karchive/blob/master/examples/tarlocalfiles/main.cpp but when I run this program it asks for bzip2.dll and two more.
                                        I really do not need to compress files. There is no example of using just KTar without compression.

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

                                        @Zgembo

                                        KTar allows you to read and write tar archives, including those that are compressed using gzip, bzip2 or xz.

                                        You may not need to use compression, but that indicates that because the code supports compression you still need to provide the extra DLLs it is asking for. Their code will not get used in your case, but they still need to be present at runtime.

                                        1 Reply Last reply
                                        3
                                        • ZgemboZ Zgembo

                                          @jsulm said in Implement something like tar archive in windows environment:

                                          @Zgembo Take a look at documentation: https://api.kde.org/frameworks/karchive/html/classKTar.html
                                          Especially "A class for reading / writing (optionally compressed) tar archives."

                                          Thank you for your replay. I am really stuck with this. I have examined this example https://github.com/KDE/karchive/blob/master/examples/tarlocalfiles/main.cpp but when I run this program it asks for bzip2.dll and two more.
                                          I really do not need to compress files. There is no example of using just KTar without compression.

                                          VRoninV Offline
                                          VRoninV Offline
                                          VRonin
                                          wrote on last edited by
                                          #25

                                          @Zgembo said in Implement something like tar archive in windows environment:

                                          this program it asks for bzip2.dll and two more.

                                          This is because KArchive can do much more than tar and my pre-compiled version allows you to do that linking to those libraries. They are available in the same link from which you downloaded the KArchive library.
                                          Linking to those libraries does not mean your tar archive is getting compressed. it just means you have the option to compress it

                                          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                                          ~Napoleon Bonaparte

                                          On a crusade to banish setIndexWidget() from the holy land of Qt

                                          ZgemboZ 1 Reply Last reply
                                          5

                                          • Login

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