有关我的应用程序,我需要使用碳文件管理器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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top