#iphone #objective-c #file #file-io
#iPhone #objective-c #файл #file-io
Вопрос:
Я пишу приложение для iphone для чтения текстового файла с использованием NSData.
NSFileHandle *fileRead;
// this may lead to crash or memory issue, if the file size is about 10 mb or more
NSData *data = [fileRead readDataOfLength:(entire contents of the file)];
Например, если размер файла равен 8 КБ, мы можем прочитать его за 8 итераций по 1 КБ за цикл.
Как мы можем определить размер файла перед чтением файла contents.so что мы можем написать код оптимизированным способом для эффективного чтения файла?
пожалуйста, дайте мне ваши предложения….
Ответ №1:
iPhone имеет все стандартные API POSIX, поэтому вы можете использовать stat («file.txt «, amp;st), где st — это «структурный показатель». Элемент «st.st_size» предоставит вам размер файла в байтах.
Ответ №2:
Если вы действительно хотите прочитать файл целиком, просто используйте readDataToEndOfFile
и не беспокойтесь о предварительном определении длины.
Из NSFileHandle вы можете найти длину сначала seekToEndOfFile
, а затем offsetInFile
. Если у вас есть фактическое имя файла, вы могли бы использовать NSFileManager attributesOfItemAtPath:error:
для получения длины (как с C stat
) вместо этого. Или, если уж на то пошло, вы могли бы фактически использовать stat
, или fstat
для дескриптора файла, возвращаемого fileDescriptor
методом NSFileHandle.