簡體   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