私はAppleScriptの土地から来て、そこで使用しています
alias of (info for thePath)
package folder of (info for thePath)
folder of (info for thePath)
パスが上記のいずれかであるかどうかを確認します。しかし、ObjC/Cocoaでそれを行う方法を見つけることができないようです。とても簡単だと思いますが、それに関する情報は見つかりません。
ありがとう...
私はAppleScriptの土地から来て、そこで使用しています
alias of (info for thePath)
package folder of (info for thePath)
folder of (info for thePath)
パスが上記のいずれかであるかどうかを確認します。しかし、ObjC/Cocoaでそれを行う方法を見つけることができないようです。とても簡単だと思いますが、それに関する情報は見つかりません。
ありがとう...
通常、NSFileManagerまたはNSWorkspaceのいずれかを使用します。
パスがフォルダ/ディレクトリであるかどうかを確認するには、NSFileManager
'sを使用します-fileExistsAtPath:isDirectory:
。
パスがパッケージであるかどうかを確認するには、NSWorkspace
'sを使用しますisFilePackageAtPath:
。
パスがエイリアスであるかどうかを確認するネイティブのCocoaの方法はわかりません(これはOS Xより前の概念です...)。私はいつもNathanDayのCocoaラッパーをAlias、NDAliasに使用しています。finderInfoFlags:type:creator:
彼のNSString
カテゴリーで見てください。それを使用するには、
UInt16 flags;
OSType type;
OSType creator;
if([@"/path/to/file" finderInfoFlags:&flags type:&type creator:&creator]){
if(flags&kIsAlias){
the file is an alias...
}
}else{
some error occurred...
}
まあそれは不必要に複雑に見えますが、それは人生です。AliasはClassicMacOSテクノロジーに属しており、CocoaはNeXTStepヘリテージに属しています。
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を確認してください。
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;
}
(YahooによるソリューションはOS X 10.8で非推奨になりました)
NSURLIsAliasFileKey
macOS10.6以降で使用できるリソース値キーがあります
NSNumber * number = nil;
[fileUrl getResourceValue:&number forKey:NSURLIsAliasFileKey error:nil];
BOOL isAlias = [number boolValue];
NSURLをチェックする私の方法はエイリアスです(私のために働きます):
// url - is alias?
NSData * bookmarkData = [NSURL bookmarkDataWithContentsOfURL:url error:nil];
BOOL isAlias = (bookmarkData) ? YES : NO;
幸運を!
Swift 3.0を使用してエイリアスとシンボリックリンクを検出するソリューションを探していましたが、CoreFoundationで応答が見つかりました
したがって、URL拡張機能を作成できます
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
}
}