1

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

谢谢

4

2 回答 2

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;
}
于 2013-08-27T09:00:29.160 回答
1

为了使文件包含一定数量的字节,您必须将那么多字节写入文件。除了包含的字节数之外,没有办法使文件的大小成为其他东西。

可以使用FSAllocateFork(或fcntlwith F_PREALLOCATE)来保留要写入的空间。例如,如果您正在实现自己的下载逻辑(如果由于某种原因 NSURLDownload 不够好)并且想要(a)确保有足够的空间可用于您正在下载的文件,您将使用它(b) 在其他事情发生之前抓住它。

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

真正增长文件的唯一方法是写入文件。

最好的方法是使用或者使用-[NSData writeToURL:options:error:]NSFileHandle,如果您立即准备好所有数据,这是一种简单的方法,这将使您能够以块的形式写入数据,而不必先将其全部构建在内存中.

于 2013-08-28T07:50:52.367 回答