Чтобы получить размер файла, вы можете просто использовать NSFileManager:
NSFileManager *fileManager = [[[NSFileManager alloc] init] autorelease];
NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:filePath error:nil];
unsigned long long size = [fileAttributes fileSize];
Вторая проблема связана с кодировкой UTF-16. Видите ли, в UTF-16 символ представлен 2 байтами (http://en.wikipedia.org/wiki/UTF-16).
Предположим, у вас есть текстовый файл в формате UTF-16 с текстом Hello
. Байты будут:
00 48 │ 00 65 │ 00 6C │ 00 6C │ 00 6F
H │ e │ l │ l │ o
Все хорошо, если вы начнете читать с байта 0 (или любого четного индекса), вы получите ожидаемый результат. Но вы начинаете читать с нечетного байта (например, 1), все символы будут испорчены, потому что байты смещены:
48 00 │ 65 00 │ 6C 00 │ 6C 00 │ 6F
䠀 │ 攀 │ 氀 │ 氀 │ ?
Чтобы это работало, просто убедитесь, что вы всегда устанавливаете четное смещение для обработчика файла перед чтением и что вы всегда читаете четное число байтов.