Страница 1 из 1

определение mime-типа файла

СообщениеДобавлено: 14.03.2014 20:26:33
minoshi
Доброго времени суток!

Вроде где-то была такая тема, но найти не смог.

Задача : определение mime-типа файла.
Платформа : линукс.

Найденные мною решения:
1) Magic4Lazarus (функция DetectMimeFromFile)
2) собственный код: через tprocess выполняется команда "file --mime-type <имя файла>", парсится вывод.

Оба решения выполняют свою задачу, но очень медленны. 200 файлов Magic4Lazarus обработал за 8 секунд, мой код на 10 секунд.

Если более быстрый метод?

Re: определение mime-типа файла

СообщениеДобавлено: 14.03.2014 21:06:01
alexs
http://habrahabr.ru/post/186828/
Такой путь не устроит?

Re: определение mime-типа файла

СообщениеДобавлено: 15.03.2014 09:58:34
minoshi
alexs писал(а):http://habrahabr.ru/post/186828/
Такой путь не устроит?

Т.е. фактически сдублировать работу file?

Re: определение mime-типа файла

СообщениеДобавлено: 15.03.2014 11:31:10
alexs
А есть другой путь? Либо искать готовые библиотеки.

Re: определение mime-типа файла

СообщениеДобавлено: 15.03.2014 14:19:07
Дож
Оба решения выполняют свою задачу, но очень медленны. 200 файлов Magic4Lazarus обработал за 8 секунд, мой код на 10 секунд.


Кэширование?

Re: определение mime-типа файла

СообщениеДобавлено: 17.03.2014 14:54:41
hinst
Посмотрите как вот здесь сделано:
FPCpackagesfcl-webexampleshttpserversimplehttpserver.pas

Добавлено спустя 5 минут 18 секунд:
В линуксе лежат mime-типы в файле:
/etc/mime.types
Модуль fpmimetypes содержит такой класс: TFPMimeTypes, там есть метод LoadFromFile, вот в экземпляр этого класса надо загрузить файл /etc/mime.types, затем можно будет вызывать метод того же класса GetMimeType для получения mime-типа по расширению

Добавлено спустя 1 минуту 14 секунд:
наверняка будет работать всё очень быстро потому, что mime-типы в таком случае загружаются один раз, новые процессы не запускаются

Re: определение mime-типа файла

СообщениеДобавлено: 17.03.2014 15:16:16
Дож
наверняка будет работать всё очень быстро потому, что mime-типы в таком случае загружаются один раз, новые процессы не запускаются

Кажется, что проблема не в новых процессах, — батч режим программы file работает так же по скорости, как и отдельные вызовы file.