I’m trying to retrieve files/folders icons that the user may have changed (not interested in the default icon for the file’s type, but only if the user has altered it, like pasting on Mac), save them and later restore them. For Mac, Windows and Linux (otherwise, it’s no fun trying hard things )
To gather the icon, I’m using various functions in the MBS plugin (I have yet to test my method). How would I go about restoring (setting) them later?
[quote=472023:@Emile Schwarz]The icons are stored in .DS_Store (check spelling), an invisible file for items.
For folders, the icon is stored in an Icon + Return file inside the directory (once more an invisible file).[/quote]
Thanks for your reply.
OK, for folders, I already knew the file. That’s not a problem, as I can store the icon file as well. (BTW: wondering what happens if the user edits that icon file and, for example, put Hello world instead; I’ll try )
For files, .DS_Store isn’t the right answer. That one stores Finder’s views of the containing folder (e.g. if you choose to sort by name or show extra information). You can hardly store the icon of all files in a given folder inside a single file.
It used to be stored in the resources fork. Now, I guess there’s another location to get/set it, I just don’t know which.
[quote=472027:@Emile Schwarz]Thumbs.db holds the images icons preview (as jpg) for images, I do not know for folders(also invisible file).
That file is not mandatory, it is created when the folder is viewed as Icons AND some images exists in that folder.[/quote]
That one still doesn’t suit my needs, sorry. If I create a picture file, I know Windows would create the thumbnail automatically; If I create another kind of file, the Thumbs.db file isn’t to be modified. In both cases, dealing with this file is probably not a good thing.
Sorry, I don’t quite understand this statement What do you mean by holding MacOS?
You’re talking about the catalog of the file system? That’s possible, as I guess a custom icon isn’t stored in the file itself (otherwise, I couldn’t have a 0 byte file with a custom icon; and I actually can). Still, how to set it?
Right. In Mac OS 9 (and earlier), there were the Desktop DB and Desktop DF files; those could be rebuilt (using option+command keys at the end of the start up process, IIRC). Unless I’m mistaken, they didn’t contain file icons, but your choices to open files with other applications and other desktop services information. I don’t think they contained file icons, otherwise those files would have been way bigger (and searching inside a single file for a particular file’s icon would have been a pain for the OS, anyway).
Mac OS X doesn’t use those files anymore. .DS_store files provide a subset of these ones, I believe.
I couldn’t agree more. If changes could be made only because technology progresses (and not because an OS maker just decides to remove a feature because he doesn’t like that feature himself ), we would not have to learn a ton of new things for the sake of change.
In the file/folder flags (e.g. with GetFileFlagsMBS), one flag is HasCustomIcon. This flag already existed in MacOS 9 (recall using ResEdit to see them ) but is still used now (at least, it was when I last checked, some months ago).
This flag, once you paste an icon in the Finder’s information dialog, is set to true (to false when you delete the custom icon). If the file has a custom icon but you remove the flag, it shows the default icon (I experimented this years ago, I guess it’s still true). If you set the flag while the file has never had a pasted, custom icon, the file stays with the default icon (under some circumstances, I’ve seen the icon showing another one, like a stationary icon).
I’m not sure, since I know the NSWorkspace set method only from now, whether I have to also set the HasCustomIcon flag after calling the NSWorkspace method or if it does it automatically. I’ll see, obviously.
Anyway, I’m not dealing with previews of picture files in my app, but good to know.
Ah, you’re referring to the resource and metadata files (for a test.jpg file having resources or otherwise unknown properties to other operating systems, you get a ._test.jpg file along the original file (actually, Mac OS would strongly hide those files, even if you bring them back from a volume whose the format doesn’t support resources)).
Those files usually don’t contain a preview of the original file, but, rather, the resource fork (or other alternate forks, as you may have 50 forks for a given file if you want) and things like the Finder’s label value or concepts foreign to other systems. Granted, one of those alternate forks may contain a preview, but it’s far from a rule.