-1

读取文本文件并将其复制到变量(CFStringRef)中的最简单、最直接的方法是什么?

4

1 回答 1

4

如果您只是想以 CFStringRef 变量结束并且不介意使用 Foundation,那么最简单的方法是使用 NSString 的初始化程序之一,该初始化程序从文件系统中读取并将其从 ARC 中转换出来:

NSString * string = [NSString stringWithContentsOfFile:@"/path/to/file" encoding:NSUTF8StringEncoding error:nil];
CFStringRef cfstring = CFBridgingRetain(string);

当然,如果您想要一个纯 CF 解决方案,那么我建议您这样做:

FILE * file;
size_t filesize;
unsigned char * buffer;

// Open the file
file = fopen("/path/to/file", "r");
// Seek to the end to find the length
fseek(file, 0, SEEK_END);
filesize = ftell(file);
// Allocate sufficient memory to hold the file
buffer = calloc(filesize, sizeof(char));
// Seek back to beggining of the file and read into the buffer
fseek(file, 0, SEEK_SET);
fread(buffer, sizeof(char), filesize, file);
// Close the file
fclose(file);
// Initialize your CFString
CFStringRef string = CFStringCreateWithBytes(kCFAllocatorDefault, buffer, filesize, kCFStringEncodingUTF8, YES);
// Release the buffer memory
free(buffer);

在这种情况下,您需要使用标准 C 库函数来获取文件内容的字节缓冲区。如果您处理的文件太大而无法加载到内存缓冲区中,那么您可以轻松地使用 mmap 函数对文件进行内存映射,这就是 NSData 在许多情况下所做的。

于 2014-03-07T17:05:54.487 回答