cocoa - 文件被隐藏了吗?

标签 cocoa macos

如何判断某个路径是否指向隐藏文件/文件夹?

NSString *file = @"/my/file/some.where";
BOOL fileIsHidden = // <-- what do I do here?

我知道隐藏文件以句点为前缀。这不是隐藏文件的唯一标准。我在某处读到有一个 .hidden 文件还可以配置隐藏的文件。

有没有一种 Cocoa/Carbon 方法可以轻松找到这个问题,而无需重写所有这些逻辑并从各种来源收集信息?

编辑:kLSItemInfoIsInvisible 检查似乎适用于某些文件。看来并没有隐藏:

/dev
/etc
/tmp
/var

默认情况下,所有这些都被 Finder 隐藏。

最佳答案

正如发帖者所指出的,它似乎不适用于/etc 和/var 之类的,所以我修改了方法。

现在需要一个“isFile” bool 值,YES 表示它是一个文件,NO 表示一个目录

BOOL isInvisible(NSString *str, BOOL isFile){
        CFURLRef inURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)str, kCFURLPOSIXPathStyle, isFile);
        LSItemInfoRecord itemInfo;
        LSCopyItemInfoForURL(inURL, kLSRequestAllFlags, &itemInfo);

        BOOL isInvisible = itemInfo.flags & kLSItemInfoIsInvisible;
        return (isInvisible != 0);
    }

    int main(){
           NSLog(@"%d",isInvisible(@"/etc",NO)); // => 1
           NSLog(@"%d",isInvisible(@"/Users",NO)); // => 0
           NSLog(@"%d",isInvisible(@"/mach_kernel",YES)); // => 1

    }

现在似乎对所有事情都有效!

关于cocoa - 文件被隐藏了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1140235/

相关文章:

ios - Xcode 4.5.2 在 Mac OS X Mountain Lion 上不断崩溃?

javascript - 如何在 JavaScript 中检测 macOS Big Sur 和/或 Monterey?

objective-c - macOS kexts 能否将代码注入(inject)特定进程(就像 mach_inject 那样)?

linux - mac : using . 配置文件自定义命令

objective-c - 沿着 CGPathRef 寻找中间点

objective-c - NSMutableArray 排序 - 不区分大小写

iphone - int 和++new 每次都加 2

objective-c - 如何以编程方式将字体复制到/System/Library/Fonts/?

cocoa - 将数据从 Plist 加载到数组时遇到问题

c++ - 用于 C/C++ 开发的 Mac 与 Ubuntu?