Как заархивировать папку со всеми файлами и подпапками, используя rubyzip - PullRequest
0 голосов
/ 29 января 2019

В моем сценарии selenium я хотел использовать гем rubyzip для архивирования всех файлов и папок, включая папку Top.Однако я только заархивировал все файлы и папки в папке Top.

Я начал использовать шаблон, как видно из GitHub.К сожалению, он только архивирует вложенные файлы и подпапки в файл, он не включает в себя папку Top, которая мне нужна.

Пример: структура файла в Windows: FolderName1 |-File1 -File2

Требуется файл FolderName1.zip со структурой, включенной в zip FolderName1 |-File1 -File2

Фактически: файл FolderName1.zip со структурой в zip (папка не была включена) - File1 - File2

Основной сценарий

#Create a random Name Application Name
  varMyNewAppName = randString(driver,5)

# Where are the files Stored?
  folder_path = File.join(File.absolute_path('./Automation Data/Weblets', File.dirname(__FILE__)),"Upload_Apps")

#Set Paths and then Zip
   directoryToZip = folder_path + "/" + varMyNewAppName 
   outputFile = folder_path + "/" + varMyNewAppName + ".zip"
  zf = ZipFileGenerator.new(directoryToZip, outputFile)
  zf.write()

почтовый класс

    class ZipFileGenerator
      # Initialize with the directory to zip and the location of the output archive.
      def initialize(input_dir, output_file)
        @input_dir = input_dir
        @output_file = output_file
      end

      # Zip the input directory.
      def write
        entries = Dir.entries(@input_dir) - %w(. ..)

        ::Zip::File.open(@output_file, ::Zip::File::CREATE) do |io|
          write_entries entries, '', io
        end
      end

      private

      # A helper method to make the recursion work.
      def write_entries(entries, path, io)
        entries.each do |e|
          zip_file_path = path == '' ? e : File.join(path, e)
          disk_file_path = File.join(@input_dir, zip_file_path)
          puts "Deflating #{disk_file_path}"

          if File.directory? disk_file_path
            recursively_deflate_directory(disk_file_path, io, zip_file_path)
          else
            put_into_archive(disk_file_path, io, zip_file_path)
          end
        end
      end

      def recursively_deflate_directory(disk_file_path, io, zip_file_path)
        io.mkdir zip_file_path
        subdir = Dir.entries(disk_file_path) - %w(. ..)
        write_entries subdir, zip_file_path, io
      end

      def put_into_archive(disk_file_path, io, zip_file_path)
        io.get_output_stream(zip_file_path) do |f|
          f.puts(File.open(disk_file_path, 'rb').read)
        end
      end
    end 
...