ファイルフォーマットとメタデータ

つか、ファイルのMIMEタイプとか拾えないのかね・・・

用途が分からないので引用元とは関係無いかも知れないけど。
以前ファイルからData URLを作ろうとしてMIMEタイプが必要になったので、その時使った方法。

MDItemRef item = MDItemCreate(kCFAllocatorDefault, (CFStringRef) path);
if ( item ) {
	CFStringRef uti = MDItemCopyAttribute(item, kMDItemContentType);
	CFRelease(item);
	if ( uti ) {
		CFStringRef mimeType = UTTypeCopyPreferredTagWithClass((CFStringRef) uti, kUTTagClassMIMEType);
		CFRelease(uti);
		if ( mimeType ) {
			//ここでmimeTypeを好きな所に格納。
			CFRelease(mimeType);
		}
	}
}

要はメタデータに格納されているUTI*1を貰って、それをMIMEタイプに変換している。Spotlightを無効にしているフォルダのファイルがどうなるのかは未検証。

余談

このコードを引っ張り出していたら、releaseし忘れを見付けた。Core Foundationはautoreleaseできないから面倒だ。

*1:Uniform Type Identifier。Tigerから導入されたファイルフォーマット識別子