友達、
非常に高速な (Gem-Server 経由で 0.2.1) ライブラリを使用してID3 タグをスキャンすることにより、 Ruby (1.9.3) スクリプトを使用して大量のオーディオ ファイルを処理しようとしています。taglib-ruby
これは私のコードの一部ですが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が処理中に食べている可能性があります。
残念ながら、API に特定の Ruby メソッドが見つかりませんでした。最終的にTagLibs C 関数の 1 つまたは両方を呼び出します。taglib-ruby
taglib_tag_free_strings();
taglib_file_free(file);
libmagic
たとえば、Ruby バインディングはclose
そのMagic
クラス内に -Method を提供するため、ブロックが確実に動作するように解放します。
の正しい Ruby メソッドtaglib-ruby
が欠落しているだけですか、それとも現時点で欠落していますか? Ruby経由で取得したファイルハンドルを解放する別の方法はありますか?