1

私の問題のユースケースを説明します。

たまたま とFinder 7.5.5古いFinder 8.1Mac OS バージョンの 2 つのファイルがあります。

使用する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 のように、この情報を直接取得するにはどうすればよいですか? 手動で行うのに数分かかりましたが、バージョンがどのように保存されているかまだわかりません。この情報を見つけることができる他の場所はありますか、それとも正しい方向に進んでいますか?

これを行う目的の C または C ソリューションはありますか?

助けてくれてありがとう!

ファイル情報ウィンドウ

もチェックしてみrsrcました。バージョン番号の直前にイースターエッグを発見。

ここに画像の説明を入力

4

1 に答える 1