繁体   English   中英

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

[英]Create file with fixed size in Cocoa

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

谢谢

此功能将一些垃圾数据写入文件。

+(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;
}

为了使文件包含一定数量的字节,必须将那么多字节写入文件。 除了文件包含的字节数之外,没有办法使文件的大小有所变化。

可以使用FSAllocateFork (或fcntlF_PREALLOCATE )来保留要写入的空间。 例如,如果您要实现自己的下载逻辑(如果由于某种原因,NSURLDownload不够好),并且想要(a)确保要下载的文件有足够的空间,则可以使用此方法(b)先抢夺它。

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

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

最好的方法是使用-[NSData writeToURL:options:error:] (这是您一次准备好所有数据的简便方法),或者使用NSFileHandle,这将使您可以分块地写入数据而不是必须先将其全部构建在内存中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM