gpt4 book ai didi

objective-c - NSString 到 FSRef 转换不起作用

转载 作者:行者123 更新时间:2023-12-03 16:53:28 25 4
gpt4 key购买 nike

对于我的应用程序,我需要使用 Carbon 文件管理器 API 来获取文件夹的大小(NSEnumerator 很慢,并且使用带有 shell 命令的 NSTask 更糟糕)。我已经导入了Carbon框架,并且使用这个方法来获取文件夹的大小:

http://www.cocoabuilder.com/archive/message/cocoa/2005/5/20/136503

它使用 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;
}

这对我来说非常完美。

编辑:我刚刚开源了我正在使用的代码。这些文件是:

This file adds a method to NSFileManager that uses an FSRef to find the complete size of a directoryThis file adds a method to NSString that will convert it to an FSRef .
Everything happens on line 46 of this file .

关于objective-c - NSString 到 FSRef 转换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com