Друзья
Я пытаюсь обработать огромное количество аудиофайлов с помощью сценария Ruby (1.9.3) путем сканирования их ID3-тегов с использованием довольно быстрого taglib-ruby
(0,2 .1 через Gem-Server).
Вот часть моего кода, в то время как 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 ест во время обработки.
К сожалению, Я не нашел определенного метода Ruby в taglib-ruby
API, который в конечном итоге вызывает одну или несколько из TagLibs C-функций:
taglib_tag_free_strings();
taglib_file_free(file);
libmagic
Привязки Ruby, например, предоставляют close
-Metod в своем классе Magic
, так что освобождение внутри гарантирует, что блоки будут работать.
Мне не хватает правильного метода Ruby для taglib-ruby
или он отсутствует в данный момент? Есть ли другой способ освобождения файловых дескрипторов, полученных через Ruby?