Я работаю над кодом, который, помимо прочего, должен сохранять заполненный нулями файл. Можно ожидать создания файла размером от 10 МБ до 1 ГБ пустым.
Должно быть похоже на эту команду Unix:
dd if=/dev/zero of=my_image.dsk count=20480
Я мог бы сделать эту работу с небольшими размерами:
int totalSize = 1024*1024;
char buf[totalSize];
strcpy(buf,"");
NSData *theData = [NSData dataWithBytes:buf length:sizeof(buf)];
//NSLog(@"%@", theData);
NSLog(@"%lu", sizeof(buf));
[theData writeToFile:@"/Users/foo/Desktop/my_image.dsk" atomically:YES];
Но если я попробую большее значение (например, 1024 *1024* 10), произойдет сбой.
Итак, я попробовал:
NSFileManager *ddd = [[NSFileManager alloc ] init];
[ddd createFileAtPath:@"/Users/foo/Desktop/my_image.dsk" contents:[NSData data] attributes:nil];
Создает пустой файл, но это плохо, потому что размер файла равен нулю. Это не должно быть ноль.
Я часами пытался найти ответ безуспешно. Я хочу сделать это в Obj-C, но C также вариант, прежде чем я сойду с ума.
Пожалуйста, кто-нибудь, дайте мне немного света!
Заранее спасибо!
- Правка -
Спасибо всем, но еще одно: можно ли писать, не выделяя все в память?