Только для чтения часть файла от диска в цели-c

Я обычно храню их в репозитории, но я действительно сочувствую Вашему требованию подавить размер.

, Если Вы не храните их в репозитории, абсолютно, должны быть заархивированы и имеющими версию так или иначе, и Ваша система сборки должна знать, как получить их. Много людей в мире Java, кажется, использует Знатока для выбирающих зависимостей автоматически, но я не использовал меня, таким образом, я не могу действительно рекомендовать за или против него.

Один хороший вариант мог бы состоять в том, чтобы сохранить отдельный репозиторий сторонних систем. Если Вы находитесь на Подрывной деятельности, Вы могли бы тогда использовать поддержку внешнего облика подрывной деятельности для автоматической проверки формы библиотек другой репозиторий. Иначе я предложил бы сохранить внутренний Анонимный FTP (или подобный) сервером, от которого Ваша система сборки может автоматически выбрать требования. Очевидно, Вы захотите удостовериться, что Вы сохраняете все старые версии библиотек и создали резервную копию всего там наряду с Вашим репозиторием.

8
задан progrmr 15 June 2014 в 14:22
поделиться

2 ответа

Вы можете перемотать назад с помощью NSInputStream:

[stream setProperty:[NSNumber numberWithInt:offset]
             forKey:NSStreamFileCurrentOffsetKey];
6
ответ дан 5 December 2019 в 09:26
поделиться

Я не думаю, что есть стандартная функция, которая это делает, но вы можете написать ее самостоятельно, используя категорию и C stdio API:

@interface NSData(DataWithContentsOfFileAtOffsetWithSize)
+ (NSData *) dataWithContentsOfFile:(NSString *)path atOffset:(off_t)offset withSize:(size_t)bytes;
@end

@implementation NSData(DataWithContentsOfFileAtOffsetWithSize)

+ (NSData *) dataWithContentsOfFile:(NSString *)path atOffset:(off_t)offset withSize:(size_t)bytes
{
  FILE *file = fopen([path UTF8String], "rb");
  if(file == NULL)
        return nil;

  void *data = malloc(bytes);  // check for NULL!
  fseeko(file, offset, SEEK_SET);
  fread(data, 1, bytes, file);  // check return value, in case read was short!
  fclose(file);

  // NSData takes ownership and will call free(data) when it's released
  return [NSData dataWithBytesNoCopy:data length:bytes];
}

@end

Тогда вы можете это:

// Read 100 bytes of data beginning at offset 500 from "somefile"
NSData *data = [NSData dataWithContentsOfFile:@"somefile" atOffset:500 withSize:100];
12
ответ дан 5 December 2019 в 09:26
поделиться