我正在编写一个代码,除其他外,它必须保存一个零填充文件。它可以期望创建一个从 10MB 到甚至 1GB 空白的文件。
它必须类似于以下 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 也是一种选择。
请有人给我一些光!
提前致谢!
- 编辑 -
谢谢大家,但还有一件事:是否可以在不将所有内容分配到内存的情况下进行编写?