2010-07-16 113 views
1

是否有一個unix工具可以讓我傳遞一個文件並告訴我文件的圖標來自哪裏?圖標從哪裏來?

我所尋找的是這樣的:

$ WhoProvidedIcon /Path/To/file.myex

UTI:com.myapplication.document

PLIST:/路徑/到/ myapplication.app/Contents/Info.plist

ICON:/path/to/myapplication.app/Contents/Resources/BaseDoc.icns

+0

我需要的原因純粹是爲了調試目的。 一個圖標被分配給一個不應該被分配的文件,這將有助於知道圖標來自哪裏。 – ericg 2010-07-16 22:11:28

+0

我可以用代碼得到部分答案: NSString * uti = [ws typeOfFile:@「/ Users/egorr/Desktop/file.vwx」error:&error]; \t NSLog(@「UTI:%@」,uti); 我還不確定如何獲取文件圖標的路徑。 – ericg 2010-07-16 22:23:47

+0

你究竟在做什麼?你有_A_文件有衝突的圖標,或有不同擴展名的文件?文檔根據從系統上安裝的應用程序收集的信息和圖標,獲取由Finder.app分配的圖標。如果你的目標是改變所有的VectorWorks文件,你應該編寫代碼來收集所有的文件。vwx文件,然後在所有文件上使用'setIcon:forFile:options:',編寫代碼來改變其他應用程序的內容有點可疑。 – theMikeSwan 2010-07-17 00:50:02

回答

1

操作系統將提供至少三個不同的位置圖標。

在一種情況下,NSWorkspace可以用來幫助確定位置:

 
NSString* uti = [ws typeOfFile:@"/Users/egorr/Desktop/file.vwx" error:&error]; 
NSLog(@"UTI: %@", uti); 
NSLog(@"UTI localized description: %@", [ws localizedDescriptionForType:uti]); 
NSLog(@"UTI error description: %@",[error localizedDescription]); 
NSURL* utiDeclarationURL = (NSURL*)UTTypeCopyDeclaringBundleURL((CFStringRef)uti); 
NSLog(@"UTI declaration URL: %@", utiDeclarationURL); 
NSDictionary* utiDeclaration = (NSDictionary*)UTTypeCopyDeclaration((CFStringRef)uti); 
NSLog(@"UTI declaration: %@", utiDeclaration); 

這不會完全得到對於圖標的路徑,但它會得到一個從該聲明來抓應用UTI。

Quick Look插件也可能提供一個圖標,qlmanage的輸出可用於確定是否屬於這種情況。

用戶可以在Finder的Get Info窗口中爲給定「類型」的所有文件設置他們喜歡的應用程序。例如,可以將文本文件類型設置爲始終在TextMate中打開。 TextMate應用程序爲其可以保存的所有文件類型提供自定義文件圖標。在Finder的get info窗口中進行此更改後,該類型的所有文件都將具有由TextMate提供並註冊到UTI的圖標。要確定是否屬於這種情況,需要查看啓動服務數據庫 - lsregister -dump

2

圖標爲Mac OSX上最應用重新存儲在應用程序包中。如果你右鍵點擊.app,然後選擇Show Package Contents然後去Contents -> Resources你應該看到那裏的圖標。

+0

謝謝,但我不夠清楚。我編輯了我的問題。 – ericg 2010-07-16 21:44:45

0

我不知道任何提供此信息的特定工具。但是,這聽起來像是你有重疊的擴展。如果Finder.app顯示文件的圖標,那麼您應該只能查看該文件的信息窗口,並查看默認情況下列出的應用程序以打開文檔。然後查看該應用程序的.plist文件以查看它是否使用了您的擴展。信息窗口還應該說明它是什麼類型的文檔,如果提供該圖標的應用程序已被刪除,或者沒有列爲默認應用程序,該文檔可能會有用。

+0

並非如此簡單。同一個應用程序有多個版本,都聲稱有相同的擴展名。有可能其中一個已經損壞,但我不認爲發現者會告訴我哪一個,如果確實如此。因此,可能需要一個工具從查找器實際獲取文件圖標的位置告訴我。 – ericg 2010-07-17 01:19:52