该文件是隐藏的吗?

rei*_*ein 4 macos cocoa

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

NSString *file = @"/my/file/some.where";
BOOL fileIsHidden = // <-- what do I do here?
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:kLSItemInfoIsInvisible检查似乎适用于某些文件.它似乎没有隐藏:

/dev
/etc
/tmp
/var

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

mic*_*moo 5

正如海报所指出的,它似乎不适用于/ etc和/ var而不是什么,所以我修改了方法.

它现在需要一个"isFile"布尔值,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

    }
Run Code Online (Sandbox Code Playgroud)

它现在似乎适用于一切!