如何在Mac上以编程方式访问文件信息?

时间:2015-07-26 20:22:37

标签: objective-c macos swift

设定:

我的新Mac(Yosemite)上有一堆音频文件。当我右键单击任何文件并执行"获取信息"时,它会在"更多信息"下提供有关该歌曲的详细信息。标签,例如

enter image description here

目的:

我需要编写一个我可以列出的程序,对于目录中的所有歌曲都是这样的:

Album, Title, Year Recorded
.
.
.

问题:

我不知道该怎么做。我是Mac新手,Objective-C / SwiftObjective-CSwift是我用来编写这个程序的原因,我想猜测?)

是否有API我可以通过编程方式访问此文件信息?还有其他语言可以用来编写这种程序吗?我已经知道的东西,比如JavaPython等?

到目前为止,我还没有任何代码可以显示我迄今为止所尝试过的内容,因为我仍然在寻找起点。任何指针都会非常感激。

2 个答案:

答案 0 :(得分:2)

正如您所注意到的,mdls命令可以提供此元数据。你不应该试图解析它。相反,您可以使用它构建的相同API。

您需要为感兴趣的文件获取NSURL。然后,您可以获取其元数据属性的字典,如下所示:

MDItemRef item = MDItemCreateWithURL(NULL, (__bridge CFURLRef)url);
NSArray* names = @[ (__bridge NSString*)kMDItemAlbum, /* ... */ ];
NSDictionary* dictionary = CFBridgingRelease(MDItemCopyAttributes(item, (__bridge CFArrayRef)names));
CFRelease(item);

现在,dictionary包含所需的属性。

答案 1 :(得分:0)

所以,我找到了一种方法来做到这一点。

Mac确实提供了一个名为mdls的实用程序,它列出了文件元数据。因此,如果我在我的示例文件中执行mdls,我会得到:

myuser00m:Hindi myuser$ mdls Pani\ Da\ Rang.mp3 
kMDItemAlbum                    = "Vicky Donor"
kMDItemAlternateNames           = (
    "/Users/myuser/Documents/My Stuff/Music/Hindi/Pani Da Rang.mp3"
)
kMDItemAudioBitRate             = 165000
kMDItemAudioChannelCount        = 2
kMDItemAudioEncodingApplication = "Eac * Lame"
kMDItemAudioSampleRate          = 44100
kMDItemAuthors                  = (
    "Ayushmann Khurrana"
)
kMDItemComposer                 = "Music: Abhishek - Akshay"
kMDItemContentCreationDate      = 2015-06-16 04:42:30 +0000
kMDItemContentModificationDate  = 2015-06-16 04:42:30 +0000
kMDItemContentType              = "public.mp3"
kMDItemContentTypeTree          = (
    "public.mp3",
    "public.audio",
    "public.audiovisual-content",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemCopyright                = "www.Songs.PK"
kMDItemDateAdded                = 2015-07-26 19:52:49 +0000
kMDItemDisplayName              = "Pani Da Rang"
kMDItemDurationSeconds          = 240.8489795918368
kMDItemFSContentChangeDate      = 2015-06-16 04:42:30 +0000
kMDItemFSCreationDate           = 2015-06-16 04:42:30 +0000
kMDItemFSCreatorCode            = ""
kMDItemFSFinderFlags            = 0
kMDItemFSHasCustomIcon          = (null)
kMDItemFSInvisible              = 0
kMDItemFSIsExtensionHidden      = 0
kMDItemFSIsStationery           = (null)
kMDItemFSLabel                  = 0
kMDItemFSName                   = "Pani Da Rang.mp3"
kMDItemFSNodeCount              = (null)
kMDItemFSOwnerGroupID           = 784317889
kMDItemFSOwnerUserID            = 376797083
kMDItemFSSize                   = 5826388
kMDItemFSTypeCode               = ""
kMDItemKind                     = "MP3 audio"
kMDItemLogicalSize              = 5826388
kMDItemLyricist                 = "www.Songs.PK"
kMDItemMediaTypes               = (
    Sound
)
kMDItemMusicalGenre             = "Bollywood"
kMDItemPhysicalSize             = 5828608
kMDItemRecordingYear            = 2012
kMDItemTitle                    = "Pani Da Rang"
kMDItemTotalBitRate             = 165000
myuser00m:Hindi myuser$ 

现在我需要编写一些代码来解析它并提取感兴趣的字段。

显然,这不是那么酷的解决方案,但在我找到更好的东西之前,这样做。一旦找到更好的东西,我会更新我的答案。