2012-11-03 43 views
4

我正在從文件夾中壓縮文件(Ruby 1.8.6,它無法更改)。現在早些時候文件中的行數減少了。但是,當我添加更多的內容壓縮,它給我看起來像腐敗的內容文件。這是長文件的排序視圖。具有更多5000行的文件。zip ruby​​查殺文件內容

有什麼辦法可以壓縮整個內容而不會損壞。

內容,如

Family = 1,1,1 

現在Fam

這裏是類直接

def download 
    FileUtils.rm_rf Dir.glob("#{RAILS_ROOT}/#{params[:id]}/xx.zip") 
    zip_them_all = ZipThemAll.new("#{RAILS_ROOT}/#{params[:id]}/xxx.zip","#{RAILS_ROOT}/#{params[:id]}/") 
    zip_them_all.zip 
end 

class ZipThemAll 
    attr_accessor :list_of_file_paths, :zip_file_path 
    def initialize(zip_file_path, list_of_file_paths) 
     @zip_file_path = zip_file_path 
     list_of_file_paths = [list_of_file_paths] if list_of_file_paths.class == String 
     @list_of_file_paths = list_of_file_paths 
    end 

    def zip 
     zip_file = Zip::ZipFile.open(self.zip_file_path, Zip::ZipFile::CREATE) 
     self.zip_em_all(zip_file, @list_of_file_paths) 
     zip_file.close 
    end 

    def zip_em_all(zip_file, file_list, sub_directory=nil) 
     file_list.each do | file_path | 
      if File.exists?file_path 
       if File.directory?(file_path) 
        file_directory_list = [] 
        # Find.find(file_path) do | path | 
        file_directory_list = Dir.entries(file_path) 
        file_directory_list.delete(".") 
        file_directory_list.delete("..") 
        file_directory_list = file_directory_list.inject([]) do | result, path | 
         result << file_path + "/" + path 
         result 
        end 
        self.zip_em_all(zip_file, file_directory_list, (sub_directory == nil ? '.' : sub_directory) + "/" + File.basename(file_path)) 
       else 
        file_name = File.basename(file_path) 
        if sub_directory != nil 
         if zip_file.find_entry(sub_directory) == nil 
          dir = zip_file.mkdir(sub_directory) 
         end 
         file_name = sub_directory + "/" + file_name 
        end 
        if zip_file.find_entry(file_name) 
         zip_file.replace(file_name, file_path) 
        else 
         zip_file.add(file_name, file_path) 
        end 
       end 
      else 
       puts "Warning: file #{file_path} does not exist" 
      end 
     end 
    end 
end 
+0

我編輯了這個問題。 –

+0

我也收到所有的文件,但一些文件被損壞,並沒有提供完整的內容 –

回答

1

請不要插PARAMS到路徑的代碼。

這使惡意用戶可以任意導航您的系統。

Bobby Tables