in reply to Re^3: Archive::ZIP - Zip selection of files
in thread Archive::ZIP - Zip selection of files

Because I would have to compare the source folders/files with those in the archive. To much code in my opinion. All I want is the script selecting - let's say - 300 files, adding them to an archive and deleting the source files from its source folders. Then execute again. Next 300 files ... and so on, up until the source folders are empty and one (now big archive) is written. I'm still wondering why the script is totally ignoring the selection of entries in the array.
  • Comment on Re^4: Archive::ZIP - Zip selection of files

Replies are listed 'Best First'.
Re^5: Archive::ZIP - Zip selection of files
by Corion (Patriarch) on Apr 10, 2015 at 09:46 UTC

    Have you considered what ->addTree is actually doing? It is not a function that purely returns information.

    I think you should rethink your approach and consider getting two lists, one list of the files in the archive and one list of the files not in the archive, then eliminate the members in both lists (see perlfaq4) and then add the appropriate number of remaining files to the archive.

      Thank you for your reply. You're right. But
      @files = $zip->memberNames();
      does exactly what I want. I have all the file names and paths in the array. And with:
      @file = splice @files, 1, 50;
      I reduce the information before it's written to an archive. I want to select before I write and have the names, that's why comparing is not my goal. It's curious why
      foreach $line (@file) { $fileend = (split(/\./,"$line"))[-1]; if (($fileend eq "jpg") || ($fileend eq "txt")) { $zip->addFile("$line"); }
      doesn't do the job. Any explanation to this?

        Your program as shown still contains the line:

        @files = $zip->addTree( "$zippath" );

        This will always add all files.