سؤال

وأريد الحصول على نوع MIME من اسم الملف باستخدام C. هل هناك طريقة للقيام بذلك دون استخدام ملف نصي يحتوي على أنواع MIME وملحقات الملفات (أي أباتشي mime.types الملف)؟

وربما هناك وظيفة للحصول على نوع MIME باستخدام اسم الملف؟ I بدلا عدم استخدام ملحق الملف إذا لم يكن لديك ل.

هل كانت مفيدة؟

المحلول

إذا كان هناك طريقة للقيام بذلك، سيكون أباتشي لا تحتاج ملف mime.types لها!

والجدول يجب أن يكون في مكان ما. انها إما في ملف منفصل التي يتم تحليل بواسطة التعليمات البرمجية الخاصة بك، أو أنه الثابت ترميز في البرنامج. والسابق هو أكثر وضوحا أفضل حل ...

ومن الممكن أيضا أن يخمن على نوع MIME من ملف عن طريق فحص محتويات الملف، أي حقول رأس، وهياكل البيانات، الخ وهذا هو النهج المتبع من قبل البرنامج file(1) وأيضا mod_mime_magic أباتشي. في كلتا الحالتين أنها لا تزال تستخدم ملف نصي منفصل لتخزين قواعد البحث وليس لديك أي تفاصيل ترميز الثابت في البرنامج نفسه.

نصائح أخرى

وأنا فقط تنفيذ هذا لمشروع الذي أعمل. libmagic هو ما كنت أبحث عنه. على RHEL / سينت أو إس في المقدمة من الملفات يبس والملفات جمعة. ديبيان / أوبونتو يبدو أن libmagic ديف.

http://darwinsys.com/file/

إليك بعض التعليمات البرمجية سبيل المثال:

#include <stdio.h>
#include <magic.h>

int main(int argc, char **argv){
  const char *mime;
  magic_t magic;

  printf("Getting magic from %s\n", argv[1]);

  magic = magic_open(MAGIC_MIME_TYPE); 
  magic_load(magic, NULL);
  magic_compile(magic, NULL);
  mime = magic_file(magic, argv[1]);

  printf("%s\n", mime);
  magic_close(magic);

  return 0;
}

ويستخدم رمز أدناه السحر قاعدة البيانات الافتراضية / البيرة / حصة / متفرقات / السحر. بمجرد الحصول على حزم ديف مثبتة، الصفحة رجل libmagic هي مفيدة جدا. أعرف أن هذا هو السؤال القديم، ولكنني وجدت على مطاردة بلدي لنفس الجواب. هذا هو بلدي الحل المفضل.

وبقدر ما أعرف، الأمر file يونكس إخراج سلسلة التمثيل الصامت مع -i الخيار:

> file -i main.c
main.c: text/x-c charset=us-ascii

ويمكنك تحميل شفرة المصدر من أداة "ملف" من هنا:

ftp://ftp.astron.com/pub/file/

والشيء هو أنه لا يستخدم GPL مثل الترخيص، أو أي لهذه المسألة.

إذا كنت ترغب في استخدام خدمة ويب، لقد أنشأت هذه كجزء من بلدي MIMETYPE <-> خدمة رمز

http://stdicon.com/

وعلى سبيل المثال:

http://stdicon.com/ext/html

وأنه يعمل على إلى AppEngine لذلك ينبغي أن يكون توافر عالية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top