Bri*_*ews 12 macos objective-c macfuse
我想以编程方式更改使用OSXFUSE(以前称为MacFUSE)实现的堆叠文件系统的卷图标.该图标需要反映已安装文件系统的状态.
我一直在尝试的方法是将/.VolumeIcon.icns的请求映射到应用程序包中的相应图标.然后将更改通知发送到文件系统,以获取实际路径(路径)和装载路径(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);
Run Code Online (Sandbox Code Playgroud)
单步执行调试器,我可以看到此代码被命中,但映射/.VolumeIcon.icns的代码很少被调用,并且从不响应这些通知.
我认为简短的答案是,你运气不好。长的答案是,虽然 OSXFUSE 项目与 Fuse4X 项目不同,但它们都源自同一来源,并且 Fuse4X 在其常见问题解答中对音量图标有这样的说法:
\n\n\n\n问 4.1。为什么 Fuse4X 卷显示有“服务器”(或“网络\n 卷”)图标?
\n\n答:准确地说,默认情况下,Fuse4X 卷显示为非本地卷,遗憾的是 Finder 将其视为“服务器”。这是一个很好的问题,为什么 Fuse4X 通常将其卷标记为非本地卷。有些人认为,对于基于磁盘的文件系统,Fuse4X 必须将卷标记为本地。好吧,让我们看看。
\n\n对于 Mac OS X 上的本地 vfs,您需要一个“真正的”磁盘设备 \xe2\x80\x93 a\n /dev/disk* 样式节点。Fuse4X 中的这种真实磁盘设备节点是有问题的:在挂载时,对于本地卷,内核会自行打开设备节点并将其传递给 Fuse4X。这样做时,内核将确保该设备当前未在使用中(其中之一是不允许多次挂载同一设备)。这发生在控制权传递给 Fuse4X 并可以继续安装之前。如果整个文件系统位于内核中,这本来就很好,但在 Fuse4X 的情况下,用户空间文件系统程序也想(独占)打开磁盘设备。
\n
| 归档时间: |
|
| 查看次数: |
1724 次 |
| 最近记录: |