的NSString FSRef转换不起作用
-
16-09-2019 - |
题
有关我的应用程序,我需要使用碳文件管理器API来获取文件夹的大小(NSEnumerator是缓慢的,并使用NSTask用shell命令更是雪上加霜)。我已经导入了碳框架,我使用这个方法来得到一个文件夹的大小:
http://www.cocoabuilder.com/archive /消息/可可/ 2005/5 /十三万六千五百零三分之二十○
它使用一个FSRef作为参数,以及我的路径串是目前一个NSString。我试图使用这个到的NSString转换为FSRef:
FSRef f;
OSStatus os_status = FSPathMakeRef((const UInt8 *)[filePath fileSystemRepresentation], &f, NULL);
if (os_status != noErr) {
NSLog(@"fsref creation failed");
}
然后我称为文件夹大小的方法:
[self fastFolderSizeAtFSRef:f];
然而,当我尝试建立,我得到关于上述行此错误:
错误:不兼容的类型为参数的一个 'fastFolderSizeAtFSRef:'
任何帮助,将不胜感激。感谢
解决方案
在 “fastFolderSizeAtFSRef” 方法需要一个FSRef *(FSRef指针)。你给它一个FSRef。这是一个字符修复,幸运的是。您有:
[self fastFolderSizeAtFSRef:f];
简单地改变为:
[self fastFolderSizeAtFSRef:&f];
和你应该是好去。不过,我正在执行这个同样的方法,但昨天有麻烦创建FSRef本身。我终于用下面的代码去:
FSRef convertNSStringToFSRef(NSString * theString) {
FSRef output;
const char *filePathAsCString = [theString UTF8String];
CFURLRef url = CFURLCreateWithBytes(kCFAllocatorDefault,
(const UInt8 *)filePathAsCString,
strlen(filePathAsCString),
kCFStringEncodingUTF8,
NULL);
CFURLGetFSRef(url, &output);
CFRelease(url);
return output;
}
这已经完美地为我工作。
编辑:我刚刚开源了,我在使用这个代码它的这些文件:
此文件增加的NSFileManager方法,该方法使用一个FSRef找到目录的完整大小。 此文件添加了一个方法的NSString,将其转换为一个FSRef 一>点击 一切都发生在该文件的线46。
不隶属于 StackOverflow