首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OSX中报告不区分大小写(使用OSXFuse)

在OSX中报告不区分大小写(使用OSXFuse)
EN

Stack Overflow用户
提问于 2017-11-28 00:18:12
回答 1查看 181关注 0票数 3

我在OSX中创建了一个不区分大小写的文件系统(使用OSXFuse)。但当我尝试使用NSURLVolumeSupportsCaseSensitiveNamesKey检查卷的大小写不敏感时,它报告它区分大小写。我的问题是,我需要在as上做什么,这样当我使用NSURLVolumeSupportsCaseSensitiveNamesKey检查区分大小写时,它会正确地将我的文件系统报告为不区分大小写?

下面是我所做的更多细节:

这就是我使用NSURLVolumeSupportsCaseSensitiveNamesKey检查大小写不敏感的方法:

代码语言:javascript
复制
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时,它正确地报告我的文件系统不区分大小写:

代码语言:javascript
复制
    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,如下所示:

代码语言:javascript
复制
void fuse_init(void* user_data, struct fuse_conn_info* conn) {
  conn->want |= FUSE_CAP_CASE_INSENSITIVE;
}
EN

回答 1

Stack Overflow用户

发布于 2017-11-28 08:14:08

您确定您的路径在第一个代码片段中是正确的,即开头缺少的斜杠吗?

代码语言:javascript
复制
NSString *path = @"Volumes/MyVolume";

除此之外,这段代码似乎也适用于我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47515372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档