Доброго времени суток!
Вроде где-то была такая тема, но найти не смог.
Задача : определение mime-типа файла.
Платформа : линукс.
Найденные мною решения:
1) Magic4Lazarus (функция DetectMimeFromFile)
2) собственный код: через tprocess выполняется команда "file --mime-type <имя файла>", парсится вывод.
Оба решения выполняют свою задачу, но очень медленны. 200 файлов Magic4Lazarus обработал за 8 секунд, мой код на 10 секунд.
Если более быстрый метод?
определение mime-типа файла
Модератор: Модераторы
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
http://habrahabr.ru/post/186828/
Такой путь не устроит?
Такой путь не устроит?
alexs писал(а):http://habrahabr.ru/post/186828/
Такой путь не устроит?
Т.е. фактически сдублировать работу file?
Оба решения выполняют свою задачу, но очень медленны. 200 файлов Magic4Lazarus обработал за 8 секунд, мой код на 10 секунд.
Кэширование?
Посмотрите как вот здесь сделано:
FPCpackagesfcl-webexampleshttpserversimplehttpserver.pas
Добавлено спустя 5 минут 18 секунд:
В линуксе лежат mime-типы в файле:
/etc/mime.types
Модуль fpmimetypes содержит такой класс: TFPMimeTypes, там есть метод LoadFromFile, вот в экземпляр этого класса надо загрузить файл /etc/mime.types, затем можно будет вызывать метод того же класса GetMimeType для получения mime-типа по расширению
Добавлено спустя 1 минуту 14 секунд:
наверняка будет работать всё очень быстро потому, что mime-типы в таком случае загружаются один раз, новые процессы не запускаются
FPCpackagesfcl-webexampleshttpserversimplehttpserver.pas
Добавлено спустя 5 минут 18 секунд:
В линуксе лежат mime-типы в файле:
/etc/mime.types
Модуль fpmimetypes содержит такой класс: TFPMimeTypes, там есть метод LoadFromFile, вот в экземпляр этого класса надо загрузить файл /etc/mime.types, затем можно будет вызывать метод того же класса GetMimeType для получения mime-типа по расширению
Добавлено спустя 1 минуту 14 секунд:
наверняка будет работать всё очень быстро потому, что mime-типы в таком случае загружаются один раз, новые процессы не запускаются
наверняка будет работать всё очень быстро потому, что mime-типы в таком случае загружаются один раз, новые процессы не запускаются
Кажется, что проблема не в новых процессах, — батч режим программы file работает так же по скорости, как и отдельные вызовы file.
