1

私のアプリでは、NSFileHandle を使用してファイルを編集していますが、編集していません。

以下はコードです:コメントとログ出力付き

    //Initialize file manager
    NSFileManager *filemgr;
    filemgr = [NSFileManager defaultManager];

    //Initialize file handle
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];

    //Check if file is writable
    if ([filemgr isWritableFileAtPath:filePath]  == YES)
        NSLog (@"File is writable");
    else
        NSLog (@"File is read only");

    //Read 1st byte of file
    NSData *decryptData = [fileHandle readDataOfLength:1];

    //Print first byte & length
    NSLog(@"data1: %d %@",[decryptData length],decryptData);   //data2: 1 <37>

    //Replace 1st byte
    NSData *zeroData = 0;
    [fileHandle writeData:zeroData];

    //Read 1st byte to check
    decryptData = [fileHandle readDataOfLength:1];

    //Print first byte
    NSLog(@"data2: %d %@",[decryptData length],decryptData);  //data2: 1 <00>

    NSURL *fileUrl=[NSURL fileURLWithPath:filePath];
    NSLog(@"fileUrl:%@",fileUrl);

    [fileHandle closeFile];

助言がありますか?

4

1 に答える 1

3

を使用して書き込みたい場合は、書き込みNSFileHandle用と読み取り用にファイルを開く必要があります。

NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];

指定したパスにあるファイルが書き込み可能かどうかわからない場合は、ファイルを開く前に適切なアクセス許可を確認し、必要な操作に対して不十分な場合はユーザーにエラーを表示する必要があります。

また、データを書き込むには、 のインスタンスを作成する必要がありますNSData。コード行

NSData *zeroData = 0;

nilゼロバイトを含むオブジェクトではなく、オブジェクトを作成しています。私はあなたが欲しいと思います

int8_t zero = 0;
NSData *zeroData = [NSData dataWithBytes:&zero length:1];
于 2012-06-14T11:35:09.960 に答える