OSXFUSE(以前のMacFUSE)を使用して実装されたスタックファイルシステムのボリュームアイコンをプログラムで変更したい。アイコンは、マウントされたファイルシステムの状態を反映している必要があります。
私が機能させようとしているアプローチは、/。VolumeIcon.icnsのリクエストをアプリケーションバンドル内の適切なアイコンにマップすることです。次に、実際のパス(path)とマウントパス(mountPath)の変更通知をファイルシステムに送信します。
[[NSWorkspace sharedWorkspace] noteFileSystemChanged: @"/Volumes"];
[[NSWorkspace sharedWorkspace] noteFileSystemChanged: [mountPath stringByDeletingLastPathComponent]];
[[NSWorkspace sharedWorkspace] noteFileSystemChanged: mountPath];
[[NSWorkspace sharedWorkspace] noteFileSystemChanged: [path stringByDeletingLastPathComponent]];
[[NSWorkspace sharedWorkspace] noteFileSystemChanged: path];
FNNotifyByPath([[[mountPath stringByDeletingLastPathComponent] dataUsingEncoding:NSUTF8StringEncoding] bytes], kFNDirectoryModifiedMessage, kNilOptions);
FNNotifyByPath([[[path stringByDeletingLastPathComponent] dataUsingEncoding:NSUTF8StringEncoding] bytes], kFNDirectoryModifiedMessage, kNilOptions);
FNNotifyByPath([[@"/Volumes" dataUsingEncoding:NSUTF8StringEncoding] bytes], kFNDirectoryModifiedMessage, kNilOptions);
デバッガーをステップスルーすると、このコードがヒットしていることがわかりますが、/。VolumeIcon.icnsをマップするコードは頻繁に呼び出されず、これらの通知に応答することはありません。