0

アップロードされたすべてのファイルが最初に public/submitted_folder に保存される機能があります。この機能の拡張により、ユーザーはアップロードされたすべてのファイルを zip で表示できるようになりました。ユーザーがファイルをダウンロードできる機能を実装しました。ここで問題が発生しました。新しく生成された zip ファイルをダウンロード後に削除する必要があります。submited_folder をスキャンして、zip ファイルが存在するかどうかをスキャンしてから削除したいのですが、どうすればよいですか。 submit_folder/folder1/folder2 などのサブフォルダーがさらにあります。それらすべてをスキャンして、zip ファイルを見つけて削除するにはどうすればよいですか。Rubyで File の API を参照しましたが、混乱しています...

4

2 に答える 2

1

Linux を使用していると仮定すると、Ruby から bash コマンドを実行できます。

以下は、パス「パス」(サブディレクトリを含む)の下の拡張子が.zipのすべてのファイルを削除するLinuxコマンドです。

find path -type f -name *.zip -delete

を使用してアプリから実行します

system("find path -type f -name *.zip -delete")

また

`find path -type f -name *.zip -delete`
于 2013-08-29T14:22:49.343 に答える
0

ファイルを操作するときは、DirおよびFileメソッドを使用してください。開始するための優れたチュートリアルがあります。このスクリーンキャストをお勧めします。

ご質問について

適切なディレクトリにいる場合、zip ファイルの取得と削除は簡単です。

すべての zip ファイルを取得する

files = Dir.glob("*.zip")

特定のファイルの削除:

File.delete("#{file}")

ファイルの抽出はもう少しトリッキーです。私自身、抽出したすべてのファイルを入れるフォルダーを作成し、そこから作業しました。rubyzipZIP ファイルをより適切に処理するには、gem も必要です。

require 'zip/zip'
# creates a directory with a name
Dir.mkdir("#{Dir.pwd}/#{name}") unless File.exists?("#{Dir.pwd}/#{name}")

# opens up the zip file
zipfile = Zip::ZipFile::open(Dir.pwd + "/" + zip_path)

# changes the working directory to the newly created folder
Dir.chdir "#{name}"

# unzips the zip and returns the xml files in it

files = []
zipfile.each do |file|
    zipfile.extract(file, "#{Dir.pwd}/#{file.name}") unless File.exists?("#{Dir.pwd}/#{file.name}")
end

編集

結局のところ、現在のディレクトリとすべてのサブディレクトリを検索するための単純な関数があります。**鍵であること

all_zip_files = Dir.glob("**/*.zip")

これらのファイルを取得したら、必要に応じて抽出、削除、または実行できます:)

于 2013-08-29T14:36:32.107 に答える