3

私はAppleScriptの土地から来て、そこで使用しています

alias of (info for thePath)
package folder of (info for thePath)
folder of (info for thePath)

パスが上記のいずれかであるかどうかを確認します。しかし、ObjC/Cocoaでそれを行う方法を見つけることができないようです。とても簡単だと思いますが、それに関する情報は見つかりません。

ありがとう...

4

6 に答える 6

4

通常、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ヘリテージに属しています。

于 2010-02-12T23:39:15.793 に答える
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を確認してください。

于 2010-03-06T21:08:12.990 に答える
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;
}

(YahooによるソリューションはOS X 10.8で非推奨になりました)

于 2013-07-29T11:52:04.630 に答える
3

NSURLIsAliasFileKeymacOS10.6以降で使用できるリソース値キーがあります

NSNumber * number = nil;
[fileUrl getResourceValue:&number forKey:NSURLIsAliasFileKey error:nil];
BOOL isAlias = [number boolValue];
于 2018-09-08T06:01:59.263 に答える
0

NSURLをチェックする私の方法はエイリアスです(私のために働きます):

// url - is alias?
NSData * bookmarkData = [NSURL bookmarkDataWithContentsOfURL:url error:nil];
BOOL isAlias = (bookmarkData) ? YES : NO;

幸運を!

于 2014-11-04T15:00:13.047 に答える
0

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
    }

}
于 2016-11-14T16:37:36.913 に答える