在Cocoa中创建具有固定大小的文件

时间:2013-08-27 08:42:14

标签: objective-c macos cocoa createfile

我的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];

由于

2 个答案:

答案 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(或fcntlF_PREALLOCATE)来保留要写入的空间。例如,如果您正在实施自己的下载逻辑(如果由于某种原因,NSURLDownload还不够好)并希望(a)确保文件有足够的空间可用,那么您可以使用它你正在下载和(b)在别人做之前抓住它。

但是,即使这并没有实际改变文件的大小,只是确保(如果成功)你的写入不会因空间不足而失败。

真正发展文件的唯一方法就是写入文件。

这样做的最好方法是使用-[NSData writeToURL:options:error:],这是一次性准备数据的简单方法,或NSFileHandle,它可以让你以块的形式写入数据而不是首先在内存中构建它。