Поиск атрибутов файла Macintosh
Я проиллюстрирую пример использования моей проблемы.
У меня есть здесь два файла, которые оказались Finder 7.5.5
а также Finder 8.1
из старых версий Mac OS.
Если я использую Cmd + I
Я получаю следующую информацию:
Version:
7.5.5, © Apple Computer, Inc. 1983-96
System 7.5 Version 7.5.3
а также
Version:
8.1, Copyright Apple Computer, Inc. 1983-97
Mac OS 8.1
Я хочу извлечь эту информацию программно. Однако я даже не уверен, где он находится.
В небольшом проекте Objective-C (Foundation) я сделал следующее для 7.5
файл:
NSString * finder7 = [[NSString alloc] initWithString:@"/Users/me/Desktop/Finder7"];
NSFileManager * fileManager = [NSFileManager defaultManager];
NSError * error = nil;
NSDictionary * attr = [fileManager attributesOfItemAtPath:finder7 error:&error];
NSLog(@"%@", attr);
Это вывод:
2013-09-25 10:53:30.224 GetAttributes[1164:903] {
NSFileCreationDate = "1996-01-15 12:00:00 +0000";
NSFileExtensionHidden = 0;
NSFileGroupOwnerAccountID = 20;
NSFileGroupOwnerAccountName = staff;
NSFileHFSCreatorCode = 1296122707;
NSFileHFSTypeCode = 1179534418;
NSFileModificationDate = "1996-01-15 12:00:00 +0000";
NSFileOwnerAccountID = 501;
NSFileOwnerAccountName = me;
NSFilePosixPermissions = 493;
NSFileReferenceCount = 1;
NSFileSize = 0;
NSFileSystemFileNumber = 4384377;
NSFileSystemNumber = 234881026;
NSFileType = NSFileTypeRegular;
}
Как видите, нет ссылки на версию или авторское право. Я не могу открыть "контент приложения", потому что у старых приложений его, очевидно, нет.
Поэтому я решил, что это может быть расширенный атрибут, поэтому я получил консоль и сделал это:
$ ls -l@
-rwxr-xr-x@ 1 me staff 0 15 Jan 1996 Finder7
com.apple.FinderInfo 32
com.apple.ResourceFork 503994
-rwxr-xr-x@ 1 me staff 3631000 16 Dec 1997 Finder8
com.apple.FinderInfo 32
com.apple.ResourceFork 502012
com.apple.metadata:kMDItemFinderComment 42
Затем я нашел эти записи в каждой из них:
$ xattr -l com.apple.FinderInfo Finder7
(...)
00077AE0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00077AF0 00 00 32 07 55 80 00 00 00 05 37 2E 35 2E 35 25 |..2.U.....7.5.5%|
00077B00 37 2E 35 2E 35 2C 20 A9 20 41 70 70 6C 65 20 43 |7.5.5, . Apple C|
00077B10 6F 6D 70 75 74 65 72 2C 20 49 6E 63 2E 20 31 39 |omputer, Inc. 19|
00077B20 38 33 2D 39 36 00 00 00 2B 00 00 00 00 00 00 00 |83-96...+.......|
(...)
$ xattr -l com.apple.FinderInfo Finder8
(...)
00077330 06 46 69 6E 64 65 72 00 00 00 00 00 00 36 08 10 |.Finder......6..|
00077340 80 00 00 00 03 38 2E 31 2B 38 2E 31 2C 20 43 6F |.....8.1+8.1, Co|
00077350 70 79 72 69 67 68 74 20 41 70 70 6C 65 20 43 6F |pyright Apple Co|
00077360 6D 70 75 74 65 72 2C 20 49 6E 63 2E 20 31 39 38 |mputer, Inc. 198|
00077370 33 2D 39 37 00 00 00 26 01 08 10 80 00 06 46 69 |3-97...&......Fi|
00077380 6E 64 65 72 00 00 00 00 00 00 00 00 00 00 00 00 |nder............|
(...)
Я никогда не использовал расширенные атрибуты, особенно в разработке. Так что здесь мне нужно немного света. Я вижу номера версий в разных позициях. Как я могу получить эту информацию прямо, как это делает OSX Finder? Я потратил несколько минут, чтобы сделать это вручную, и до сих пор не ясно, как хранится версия. Есть ли другое место, где я могу найти эту информацию или я иду в правильном направлении?
Существуют ли решения Objective-C или C, которые будут делать это, чтобы мне не пришлось изобретать велосипед?
Я ценю помощь!
Я тоже пробовал проверять rsrc
, Нашел пасхальное яйцо как раз перед номером версии.
1 ответ
Информация хранится в расширенном атрибуте com.apple.ResourceFork
, Вы можете использовать такой инструмент, как DeRez
декомпилировать информацию.
Если вы хотите получить программный доступ к ветке ресурсов, есть Resource Manager API, но почти все, что там не рекомендуется для 10.8. Тип ресурса для информации о версии 'vers'
ресурс.