2011-12-26 78 views
2

在可可,你可以得到一個文件的屬性如下Cocoa和CoreFoundation返回的文件屬性有什麼區別?

NSString *path = @"/path/to/some/file"; 
NSError *err = ......; 
NSDictionary *dic = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:&err]; 
NSLog(@"%@", dic); 

,它將返回鍵的目錄,例如現在

{ 
    NSFileCreationDate = "2009-12-02 10:03:38 +0000"; 
    NSFileExtensionHidden = 0; 
    NSFileGroupOwnerAccountID = 80; 
    NSFileGroupOwnerAccountName = admin; 
    NSFileHFSCreatorCode = 0; 
    NSFileHFSTypeCode = 0; 
    NSFileModificationDate = "2009-12-02 19:20:54 +0000"; 
    NSFileOwnerAccountID = 501; 
    NSFileOwnerAccountName = Tony; 
    NSFilePosixPermissions = 511; 
    NSFileReferenceCount = 1; 
    NSFileSize = 496988; 
    NSFileSystemFileNumber = 5187496; 
    NSFileSystemNumber = 234881029; 
    NSFileType = NSFileTypeRegular; 
} 

,您還可以使用CoreFoundationMDItem到獲取文件屬性

NSString *path = @"/path/to/some/file"; 
MDItemRef mdItem = MDItemCreate(kCFAllocatorDefault, (__bridge CFStringRef)path); 
CFArrayRef arr = MDItemCopyAttributeNames(mdItem); 
CFDictionaryRef dic = MDItemCopyAttributes(mdItem, arr); 
NSLog(@"%@", dic); 

而且它會返回像這樣的東西

{ 
    kMDItemAuthors =  (
     "Some One" 
    ); 
    kMDItemContentCreationDate = "2009-12-02 10:03:38 +0000"; 
    kMDItemContentModificationDate = "2009-12-02 19:20:54 +0000"; 
    kMDItemContentType = "org.openxmlformats.presentationml.presentation"; 
    kMDItemContentTypeTree =  (
     "org.openxmlformats.presentationml.presentation", 
     "org.openxmlformats.openxml", 
     "public.zip-archive", 
     "com.pkware.zip-archive", 
     "public.data", 
     "public.item", 
     "com.apple.bom-archive", 
     "public.archive", 
     "public.presentation", 
     "public.composite-content", 
     "public.content" 
    ); 
    kMDItemDateAdded = "2011-08-16 07:52:53 +0000"; 
    kMDItemDisplayName = "Some File.pptx"; 
    kMDItemFSContentChangeDate = "2009-12-02 19:20:54 +0000"; 
    kMDItemFSCreationDate = "2009-12-02 10:03:38 +0000"; 
    kMDItemFSCreatorCode = 0; 
    kMDItemFSFinderFlags = 0; 
    kMDItemFSHasCustomIcon = 0; 
    kMDItemFSInvisible = 0; 
    kMDItemFSIsExtensionHidden = 0; 
    kMDItemFSIsStationery = 0; 
    kMDItemFSLabel = 0; 
    kMDItemFSName = "Some File.pptx"; 
    kMDItemFSNodeCount = 496988; 
    kMDItemFSOwnerGroupID = 80; 
    kMDItemFSOwnerUserID = 501; 
    kMDItemFSSize = 496988; 
    kMDItemFSTypeCode = 0; 
    kMDItemKind = "Microsoft PowerPoint presentation"; 
    kMDItemLogicalSize = 496988; 
    kMDItemPhysicalSize = 499712; 
    kMDItemTitle = "PowerPoint Presentation"; 
} 

我的問題是,這兩種查找文件屬性的方法有什麼區別?似乎有一些等價但不是所有的時間,哪個更好?爲什麼有這兩種方式呢?

+0

'@「/ path/to/some/file」'是路徑,而不是URL。出於這個原因,「'url」是該變量的錯誤名稱。 – 2011-12-26 19:17:35

+0

@Peter明白了,感謝您的指針 – Tony 2011-12-26 20:45:36

回答

5

從NSFileManager返回的屬性是存儲在文件系統文件中的屬性。 MDItemCopyAttributes的結果來自Spotlight索引,其中包含大部分(全部)文件系統屬性以及系統上安裝的任何Spotlight插件的結果。

+3

與此相關的一件事是Spotlight可以關閉,無論是按卷還是在系統範圍內。如果用戶已經關閉了相關的音量和/或一般的音量,那麼沒有Spotlight索引可以參考,所以元數據API將不會返回任何內容。無論是否啓用Spotlight,NSFileManager,核心服務文件管理器以及「stat」和好友都可以工作。 – 2011-12-26 18:56:46

+0

@peter謝謝。這是一個很好的觀點。 – 2011-12-26 19:14:09

相關問題