ほとんどの言語にはこれが欠けているので、OCaml でそれが見つかれば非常に驚きます。Apache はmime.types
ファイルを使ってそれを行います - ヒントを探すことができます。これが最も一般的な方法です。拡張子を MIME タイプにマップする巨大なテーブルです。OCaml で簡単に実装できます。
let mimetype_of_extension = function
| "txt" | "log" -> "text/plain"
| "html" | "htm" -> "text/html"
| "zip" | "application/zip"
...
もう 1 つの方法は、ファイルの内容を確認することですが、基本的にはさまざまなファイル形式について知る必要があります。
とはいえ、すべての言語のソース ファイルは通常text/plain
. それらは MIME タイプで区別できません。get_language_from_mime_type
したがって、私はあなたの機能が何をするのか本当にわかりません。
ただし、さまざまなソース ファイルのファイル名拡張子は多かれ少なかれ標準化されているため、拡張子がわかれば言語がわかります。拡張子を取得するのは、ファイル名の最後のピリオドに続くものをすべてリッピングするのと同じくらい簡単です。
let extension_of_filename filename =
let pos = (String.rindex filename '.') + 1 in
let len = String.length filename in
let ext = String.create (len - pos) in
String.blit filename pos ext 0 (len - pos);
ext;;
まあ、少なくとも、Brainfuck と OCaml 以外のどの言語でも簡単です。その後は簡単です - "c" は "h" と同様に C プログラムです。"ml" は OCaml です。等