在 OSX 中报告不区分大小写(使用 OSXFuse)
Posted
技术标签:
【中文标题】在 OSX 中报告不区分大小写(使用 OSXFuse)【英文标题】:Report case insensitivity in OSX (using OSXFuse) 【发布时间】:2017-11-27 16:18:11 【问题描述】:我在 OSX 中创建了一个不区分大小写的文件系统(使用 OSXFuse)。但是,当我尝试使用NSURLVolumeSupportsCaseSensitiveNamesKey
检查我的音量是否不区分大小写时,它报告为区分大小写。我的问题是,我需要在 OSX 上做什么,以便当我使用 NSURLVolumeSupportsCaseSensitiveNamesKey
检查区分大小写时,它会正确报告我的文件系统不区分大小写?
下面是我所做的更多细节:
这就是我使用NSURLVolumeSupportsCaseSensitiveNamesKey
来检查不区分大小写的方式:
NSString *path = @"/Volumes/MyVolume";
NSURL *file_system = [NSURL fileURLWithPath:path isDirectory:YES];
NSNumber *case_sensitive_fs;
BOOL has_case_sensitive_resource = [file_system getResourceValue:&case_sensitive_fs
forKey:NSURLVolumeSupportsCaseSensitiveNamesKey
error:NULL];
if (!has_case_sensitive_resource)
LOG("Has no case sensitive resource");
else
if ([case_sensitive_fs intValue] ==1)
LOG("This is case sensitive file system");
else
LOG("This is case insensitive file system");
请注意,当我使用getattrlist
时,它会正确报告我的文件系统不区分大小写:
typedef struct volume_capabilities_result
u_int32_t length;
vol_capabilities_attr_t volume_capability;
VolumeCapabilitiesResult;
//...
struct attrlist list = 0 ;
list.bitmapcount = ATTR_BIT_MAP_COUNT;
list.reserved = 0;
list.volattr = ATTR_VOL_INFO | ATTR_VOL_CAPABILITIES;
VolumeCapabilitiesResult volumeCapResult;
int result = getattrlist("/Volumes/MyVolume", &list, &volumeCapResult, sizeof(volumeCapResult), 0);
if (result != -1 &&
(volumeCapResult.volume_capability.valid[VOL_CAPABILITIES_FORMAT] & VOL_CAP_FMT_CASE_SENSITIVE) != 0)
bool case_senstive = (volumeCapResult.volume_capability.capabilities[VOL_CAPABILITIES_FORMAT] &
VOL_CAP_FMT_CASE_SENSITIVE) != 0;
if (case_senstive)
LOG("getattrlist said we are case sensitive");
else
LOG("getattrlist said we are case insensitive");
我相信getattrlist
正确报告了它,因为我使用 osxfuse 来实现 fuse_operations.init 如下:
void fuse_init(void* user_data, struct fuse_conn_info* conn)
conn->want |= FUSE_CAP_CASE_INSENSITIVE;
【问题讨论】:
我的情况基本相同;我将 osxfuse 文件系统设置为不区分大小写模式,getattrlist 和 pathconf 都表明它不区分大小写,但 NSURL 检查不区分大小写。你有没有想过如何让它返回正确的结果? 【参考方案1】:你确定你的第一个代码sn-p中的路径是正确的,即开头缺少的斜杠吗?
NSString *path = @"Volumes/MyVolume";
除此之外,这段代码似乎对我有用。
【讨论】:
啊,抱歉打错了。我刚刚编辑了代码。复制粘贴后,我对代码进行了一些重新格式化,并意外删除了斜杠。第一个和第二个 sn-p “工作”,因为它确实运行并报告我的卷区分大小写。我只是不知道如何使我的卷在 OSX 中注册为不区分大小写。以上是关于在 OSX 中报告不区分大小写(使用 OSXFuse)的主要内容,如果未能解决你的问题,请参考以下文章