我是Mac和Objective-C的新手,所以我可能会在这里咆哮错误的树,很可能有更好的方法来做到这一点。
我已尝试过以下代码,但似乎不对。看来我在调用FSCreateDirectoryUnicode时没有得到正确的长度。实现这一目标的最简单方法是什么?
NSString *theString = @"MyFolderName";
NSData *unicode = [theString dataUsingEncoding:NSUnicodeStringEncoding allowLossyConversion:NO];
FSCreateDirectoryUnicode(&aFolderFSRef, [theString length], [unicode bytes], kFSCatInfoNone, NULL, &newFolderFSRef, NULL, NULL);
答案 0 :(得分:4)
您的原始字符串数据存在一些问题。但是在Cocoa中最简单的方法是:
NSString *theString = @"MyFolderName";
NSString* path = [NSHomeDirectory() stringByAppendingPathComponent:theString];
[[NSFileManager defaultManager] createDirectoryAtPath:path
attributes:nil];
您确实使用FSRef指定了创建目录的路径。我的示例使用主目录。如果你真的必须使用FSRef中的目录并且不知道它的路径,那么使用FSCreateDirectoryUnicode函数可能会更容易:
编辑:更改了代码以使用正确的编码。
NSString *theString = @"MyFolderName";
const UniChar* name = (const UniChar*)[theString cStringUsingEncoding:NSUnicodeStringEncoding];
FSCreateDirectoryUnicode(&aFolderFSRef, [theString length], name, kFSCatInfoNone, NULL, &newFolderFSRef, NULL, NULL);
原始代码中唯一被破坏的是dataUsingEncoding
返回字符串的外部表示。这意味着数据在开头包含一个unicode字节顺序标记,FSCreateDirectoryUnicode不需要。
答案 1 :(得分:0)
您的代码看起来不错。我会使用[unicode length] / 2作为长度,尽管在所有(或至少几乎所有)情况下它应该等于[theString length]。
或者,您可以使用Nathan Day的NDAlias NSString + NDCarbonUtilities类别
+ (NSString *)stringWithFSRef:(const FSRef *)aFSRef
{
NSString * thePath = nil;
CFURLRef theURL = CFURLCreateFromFSRef( kCFAllocatorDefault, aFSRef );
if ( theURL )
{
thePath = [(NSURL *)theURL path];
CFRelease ( theURL );
}
return thePath;
}
获取FSRef的路径,然后是Nikolai的解决方案:
NSString* aFolderPath = [NSString stringWithFSRef:aFolderFSRef];
NSString* path = [aFolderPath stringByAppendingPathComponent:theString];
[[FSFileManager defaultManager] createDirectoryAtPath:path attributes:nil];