Читать текстовый файл с Core Foundation в разработке Apple?

Какой самый простой и понятный способ прочитать текстовый файл и скопировать его в переменную (CFStringRef)?

1 ответ

Если вы просто хотите получить переменную 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.

Другие вопросы по тегам