我的MAC应用需要创建具有固定大小的文件。示例:我想创建文件名为:test.txt,固定大小:1069字节。我怎样才能做到这一点?我使用下面的代码来写文件:
NSError *err;
NSString* arrayText = [writeArray componentsJoinedByString: @"\n"];
[filemgr createFileAtPath:[NSString stringWithFormat:@"%@/test.txt",sd_url] contents:nil attributes:nil];
[arrayText writeToFile:[NSString stringWithFormat:@"%@/test.txt",sd_url] atomically:YES encoding:NSUTF8StringEncoding error:&err];
由于
答案 0 :(得分:1)
此函数会将一些垃圾数据写入文件。
+(BOOL)writeToFile:(NSString *)path withSize:(size_t)bytes;
{
FILE *file = fopen([path UTF8String], "wb");
if(file == NULL)
return NO;
void *data = malloc(bytes); // check for NULL!
if (data==NULL) {
return NO;
}
fwrite(data, 1, bytes, file);
fclose(file);
return YES;
}
如果你不想使用fwrite
+(BOOL)writeToFile:(NSString *)path withSize:(size_t)bytes;
{
void *data = malloc(bytes); // check for NULL!
if (data==NULL) {
return NO;
}
NSData *ldata = [NSData dataWithBytes:data length:bytes];
[ldata writeToFile:path atomically:NO];
return YES;
}
答案 1 :(得分:1)
为了使文件包含一定数量的字节,必须将多个字节写入文件。没有办法让文件的大小不是它包含的字节数。
您可以使用FSAllocateFork
(或fcntl
与F_PREALLOCATE
)来保留要写入的空间。例如,如果您正在实施自己的下载逻辑(如果由于某种原因,NSURLDownload还不够好)并希望(a)确保文件有足够的空间可用,那么您可以使用它你正在下载和(b)在别人做之前抓住它。
但是,即使这并没有实际改变文件的大小,只是确保(如果成功)你的写入不会因空间不足而失败。
真正发展文件的唯一方法就是写入文件。
这样做的最好方法是使用-[NSData writeToURL:options:error:]
,这是一次性准备数据的简单方法,或NSFileHandle,它可以让你以块的形式写入数据而不是首先在内存中构建它。