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

ファイルに特定のバイト数を含めるには、そのバイト数をファイルに書き込む必要があります。ファイルに含まれるバイト数以外のサイズをファイルのサイズにする方法はありません。

(またはと共に) を使用して、書き込むスペースを確保できます。たとえば、独自のダウンロード ロジックを実装していて (何らかの理由で NSURLDownload が十分ではなかった場合)、(a) ダウンロードするファイルに十分なスペースがあることを確認したい場合に、これを使用します。 (b) 他の何かが実行する前にそれを取得します。FSAllocateForkfcntlF_PREALLOCATE

ただし、それでも実際にはファイルのサイズは変更されませんが、(成功した場合) 書き込みが不十分なスペースで失敗しないことを保証するだけです。

ファイルを本当に大きくする唯一の方法は、ファイルに書き込むことです。

これを行う最善の方法は-[NSData writeToURL:options:error:]、一度にすべてのデータの準備ができている場合に簡単な方法である を使用するか、最初にすべてのデータをメモリに構築するのではなく、チャンクでデータを書き込むことができる NSFileHandle を使用することです。 .

于 2013-08-28T07:50:52.367 に答える
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 に答える