友人、taglib-rubyとリソースバランシング(ファイルハンドルの解放)?
私はGem-を経由してかなり速いtaglib-ruby
(0.2.1を使用してそのID3タグをスキャンすることによってルビー(1.9.3)スクリプトを使用してオーディオファイルの膨大な量を処理しようとしていますサーバー)ライブラリ。 audio
はRubyの-String内の完全なファイルパスが含まれていながら、ここで
は、私のコードの一部です:
begin
file_ref = TagLib::FileRef.new(audio)
unless file_ref.tag.nil?
unless file_ref.tag.artist.nil? or file_ref.tag.title.nil?
…
end
end
ensure
file_ref = nil
end
は、それから私は、ほぼ処理の終了時にトラブルに巻き込まれます。 TagLibのは読み取り権限が不足して文句を言っているとFileUtils.mv
は長いその後、ファイルを移動することはできません。私のスクリプトは、無料のファイルを処理している間TagLibのが食べているを処理していないので、これは、おそらくケースです。
Unfortunalty Iは、最終的に一つまたはより良いTAGLIBS C関数の両方の呼び出しtaglib-ruby
APIにおける特定のルビ方法、見つかりませんドン:例えば
taglib_tag_free_strings();
taglib_file_free(file);
libmagic
のRubyバインディングをclose
を提供します - メソッドがそのMagic
クラス内にあるので、ブロックを確実に解放することができます。
は、私はちょうどtaglib-ruby
の正しいRubyのメソッドをしないのですか、それは現時点では欠けていますか? Rubyで取得したファイルハンドルを解放する別の方法はありますか?