2

どうやら、NSFileManagerによって作成されたファイルを削除することはできませんmkstemp()。これを実証するためのテストコードを次に示します。

char pathCString[] = "/tmp/temp.XXXXXX";
int fileDescriptor = mkstemp(pathCString);
if (fileDescriptor == -1) {
    NSLog(@"mkstemp failed");
} else {
    close(fileDescriptor);
    NSURL *url = [NSURL URLWithString:[NSString stringWithCString:pathCString encoding:NSASCIIStringEncoding]];
    NSLog(@"URL: %@", url);
    NSError *error;
    if (![[NSFileManager defaultManager] removeItemAtURL:url error:&error]) {
        NSLog(@"could not delete file: %@", error);
    }
}

上記のコードを実行すると、ログに表示される内容は次のとおりです。

URL: /tmp/temp.A7DsLW
could not delete file: Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x1001108a0 "The file “temp.A7DsLW” doesn’t exist."

私はこれをSnowLeopardで実行しています。問題が発生している理由および/または問題を回避する方法についてのアイデアはありますか?

ありがとう!

4

1 に答える 1

4

-URLWithString:を使用しないでください。-fileURLWithPathを使用してください。有効なファイルURLを作成していません。パス文字列をNSFileManagerの-removeItemAtPathに直接渡す:もちろん短くなります。

また、ファイルパスの場合は、常に-stringWithUTF8String:を使用してパス文字列を作成します。

于 2010-03-31T21:51:30.773 に答える