Ruby 压缩文件内容
我正在从文件夹中压缩文件(Ruby 1.8.6,无法更改)。现在早些时候,文件中的行数减少了,压缩效果很好。但当我向zip添加更多内容时,它会给我一个看起来像是损坏内容的文件。这是长文件的排序视图。超过5000行的文件 有没有办法压缩完整的内容而不造成损坏 心满意足Ruby 压缩文件内容,ruby,zip,Ruby,Zip,我正在从文件夹中压缩文件(Ruby 1.8.6,无法更改)。现在早些时候,文件中的行数减少了,压缩效果很好。但当我向zip添加更多内容时,它会给我一个看起来像是损坏内容的文件。这是长文件的排序视图。超过5000行的文件 有没有办法压缩完整的内容而不造成损坏 心满意足 Family = 1,1,1 现在是Fam 下面是一个类的代码 def download FileUtils.rm_rf Dir.glob("#{RAILS_ROOT}/#{params[:id]}/xx.zip")
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
def下载
FileUtils.rm_rf Dir.glob(“#{RAILS_ROOT}/#{params[:id]}/xx.zip”)
zip#u theme_all=ZipThemAll.new(“#{RAILS_ROOT}/#{params[:id]}/xxx.zip”),“#{RAILS_ROOT}/#{params[:id]}/”)
把他们全都拉上
结束
ZipThemAll类
属性访问器:文件路径列表,:zip文件路径
def初始化(压缩文件路径、文件路径列表)
@zip\u文件路径=zip\u文件路径
list_of_file_paths=[list_of_file_paths]如果list_of_file_paths.class==String
@文件路径列表=文件路径列表
结束
def拉链
zip\u file=zip::ZipFile.open(self.zip\u file\u路径,zip::ZipFile::CREATE)
self.zip\u em\u all(zip\u文件,@list\u文件路径)
zip_file.close
结束
def zip_em_all(zip_文件、文件列表、子目录=nil)
文件列表。每个do文件路径|
如果File.exists?文件路径
if File.directory?(文件路径)
文件目录列表=[]
#Find.Find(文件路径)do |路径|
文件目录列表=目录项(文件路径)
文件目录列表。删除(“.”)
文件目录列表。删除(“…”)
file_directory_list=file_directory_list.inject([])do |结果,路径|
结果请不要将参数直接插入路径
这允许恶意用户任意浏览您的系统
.我也正在获取所有文件,但其中一些文件已损坏,无法提供完整内容