Я работаю над кодом, который, помимо прочего, должен сохранять нулевой файл. Он может рассчитывать на создание файла с 10 МБ до 1 ГБ пробела.Сохраните пустой файл в Objective-C
Она должна быть похожа на эту команду 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 также является опцией, прежде чем я схожу с ума.
Пожалуйста, кому-нибудь дайте мне немного света!
Заранее благодарен!
- Edit -
Спасибо всем, но еще одна вещь: можно писать без выделения все на память?
Он падает, потому что вы назначаете его в стек. У вас ограниченный объем памяти в стеке. Вы пытаетесь выделить 1 МБ в стеке, как есть, лучше использовать вызов malloc & memset. –
@ RichardJ.RossIII: Вы не должны 'malloc' &' memset' вообще использовать вместо этого 'calloc'. Таким образом вы можете сэкономить много памяти. –
@ DietrichEpp Действительно? Я слышал наоборот, и этот memset лучше, чем вызов calloc, потому что он больше вложен? Только то, что я слышал, никак не могу сказать. –