我來自AppleScript的土地,在那裏,我們使用檢查路徑是ObjC
alias of (info for thePath)
package folder of (info for thePath)
folder of (info for thePath)
,看是否有路徑或者以上的文件夾/包/別名。但我似乎無法找到如何在ObjC /可可中做到這一點。我很確定這很容易,但我沒有找到任何有關它的信息。
謝謝...
我來自AppleScript的土地,在那裏,我們使用檢查路徑是ObjC
alias of (info for thePath)
package folder of (info for thePath)
folder of (info for thePath)
,看是否有路徑或者以上的文件夾/包/別名。但我似乎無法找到如何在ObjC /可可中做到這一點。我很確定這很容易,但我沒有找到任何有關它的信息。
謝謝...
通常您使用NSFileManager或NSWorkspace。
要查看路徑是否是文件夾/目錄,請使用NSFileManager
的-fileExistsAtPath:isDirectory:
。
要查看路徑是否爲包,請使用NSWorkspace
的isFilePackageAtPath:
。
我不知道任何本地的可可方式來檢查路徑是別名(這是一個OS X之前的概念...)。 我總是使用Nathan Day的可可包裝Alias,NDAlias。在他的NSString
類別中查看finderInfoFlags:type:creator:
。 要使用它,做
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...
}
那麼它看起來過於複雜,但這就是生活。別名屬於Classic Mac OS技術,而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;
}
(雅虎的解決方案是在OS X中棄用10.8)
我的檢查方法NSURL是別名(適用於我):
// url - is alias?
NSData * bookmarkData = [NSURL bookmarkDataWithContentsOfURL:url error:nil];
BOOL isAlias = (bookmarkData) ? YES : NO;
祝你好運!
我一直在尋找一個解決方案來檢測使用雨燕3.0別名和符號鏈接,發現響應In core Foundation
所以,你可以創建一個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
}
}
謝謝。 我發現我需要使用finderInfoFlags:kIsAlias類型:0創建者:0但我不知道如何給它一個路徑... – Jef 2010-02-13 08:41:59
感謝堆人!注意:在您的代碼中,您使用getFinderInfo並且它不存在。你必須使用finderInfoFlags,就像你說的更高一些。 – Jef 2010-02-14 10:00:32
你是完全正確的。愚蠢的我。固定。 – Yuji 2010-02-14 12:08:15