我来自AppleScript的土地,我们使用
alias of (info for thePath)
package folder of (info for thePath)
folder of (info for thePath)
查看路径是否是上述任一路径。但我似乎无法找到如何在ObjC / Cocoa中做到这一点。我很确定这很容易,但我找不到任何关于它的信息。
...谢谢
答案 0 :(得分:3)
通常您使用NSFileManager或NSWorkspace。
要查看路径是否是文件夹/目录,请使用NSFileManager
的{{1}}。
要查看路径是否为包,请使用-fileExistsAtPath:isDirectory:
的{{1}}。
我不知道任何本机Cocoa方法来检查路径是否是别名(这是OS X之前的概念......)。
我总是使用Nathan Day的Alias的Cocoa包装,NDAlias。请参阅NSWorkspace
类别中的isFilePackageAtPath:
。
要使用它,请执行
finderInfoFlags:type:creator:
它看起来不必要地复杂,但这就是生活。 Alias属于Classic Mac OS技术,而Cocoa属于NeXTStep传统。
答案 1 :(得分:3)
NSString *path;
BOOL isAliasFile=NO;
FSRef fsRef;
FSPathMakeRef((const UInt8 *)[path fileSystemRepresentation], &fsRef, NULL);
Boolean isAliasFileBoolean, isFolder;
FSIsAliasFile (&fsRef, &isAliasFileBoolean, &isFolder);
if(isAliasFileBoolean)
isAliasFile=YES;
NSLog([NSString stringWithFormat:@"%d %@",isAliasFile,path]);
我找到的最快的。您可以使用它来检查它是否是文件夹 - 请检查链接FSIsAliasFile。
答案 2 :(得分:3)
从OS X 10.6开始,您可以执行以下操作来确定文件是否为别名:
- (BOOL) fileIsAlias: (NSString*) thePath {
NSURL* url = [NSURL fileURLWithPath:thePath];
CFURLRef cfurl = (__bridge CFURLRef) url;
CFBooleanRef cfisAlias = kCFBooleanFalse;
BOOL success = CFURLCopyResourcePropertyForKey(cfurl, kCFURLIsAliasFileKey, &cfisAlias, NULL);
BOOL isAlias = CFBooleanGetValue(cfisAlias);
return isAlias && success;
}
(雅虎的解决方案在OS X 10.8中已弃用)
答案 3 :(得分:1)
有一个资源值键NSURLIsAliasFileKey
可在macOS 10.6+上使用
NSNumber * number = nil;
[fileUrl getResourceValue:&number forKey:NSURLIsAliasFileKey error:nil];
BOOL isAlias = [number boolValue];
答案 4 :(得分:0)
我检查NSURL的方法是别名(适用于我):
// url - is alias?
NSData * bookmarkData = [NSURL bookmarkDataWithContentsOfURL:url error:nil];
BOOL isAlias = (bookmarkData) ? YES : NO;
祝你好运!
答案 5 :(得分:0)
我一直在寻找使用Swift 3.0检测别名和符号链接的解决方案,并找到了回复In core Foundation
因此,您可以创建网址扩展
extension URL{
var isAnAlias:Bool{
// Alias? https://github.com/apple/swift-corelibs-foundation/blob/master/Foundation/URL.swift#L417
let resv:URLResourceValues? = try? self.resourceValues(forKeys: [URLResourceKey.isAliasFileKey])
return resv?.isAliasFile ?? false
}
}