[M1 Mac, Big Sur 11.6.8, Swift 5.5.2, NO IDE]
久々のSwiftネタです。
ファイルのUTIを取得するコードを紹介します。Core Foundationを使用します。コードは参考サイトから拝借しました。
printutiファイルは新設した/usr/local/bin2に置き、パスを通して使えるようにしました。
C++でも出来なくはないみたいですが、かなりややこしそうなので素直にSwiftを使う方がいいようです。
Swiftコードをライブラリ化してC++で使いたいものの、さくっと調べた感じでは情報はありませんでした。
import Foundation
if let argument = CommandLine.arguments.dropFirst().first {
let url = URL(fileURLWithPath: argument)
if let uti = (try? url.resourceValues(forKeys: [.typeIdentifierKey]))?.typeIdentifier {
print(uti)
}
else {
print("UTI取得に失敗しました: \(argument)")
}
}
// 実行ファイル作成(ファイル名はprintuti)
swiftc -o printuti main.swift
// UTIの取得
printuti [filepath]
// 使用例
~ $ printuti test.png
public.png