2013-07-08 34 views
1

有一個zip文件。它可以有10個文件或一個文件夾。該文件夾將包含10個文件。現在,如果zip文件有一個文件夾,那麼我必須將所有文件移動到上面的一個目錄中,即Ruby:複製zipfile文件夾中的內容

zipfile.zip包含文件夾。文件夾有10個文件。通常,如果我解壓縮,我會得到zipfile /文件夾/ 10文件。現在,我必須得到像zipfile/10文件。即。將所有文件移動到上面的一個目錄。

如何做到這一點?請幫忙。

回答

1

如果你不介意使用Linux unzip,真的不擔心子目錄:

def unzip(file) 
    to = File.join(File.dirname(file), File.basename(file, ".*")) 
    Dir.mkdir(to) unless File.exists?(to) 
    `unzip -j #{file} -d #{to}` 
end 
# unzip('yourfile.zip') 

這種方法在同一目錄具有相同名稱的壓縮文件的zip文件創建一個新的目錄(減去擴展)。然後,它將提取(使用unzip)該zip文件到該目錄中,忽略所有路徑(-j標誌告知unzip垃圾路徑)。

編輯

根據您的評論,這裏是一個辦法做到這一點沒有系統調用:

def unzip(file) 
    Zip::ZipFile.open(file) do |zipfile| 
    to = File.join(File.dirname(file), File.basename(file, ".*")) 
    FileUtils.mkdir(to) unless File.exists? to 
    zipfile.each do |f| 
     if f.file? # Don't extract directories 
     fpath = File.join(to, File.basename(f.name)) 
     zipfile.extract(f, fpath) unless File.exists?(fpath) 
     end 
    end 
    end 
end 
+0

我想只用Ruby庫調用做到這一點。沒有系統調用。 –

+0

我已經更新了我的答案,但沒有使用系統調用。 –

相關問題