2012-06-14 1 views
1

В моем приложении я использую NSFileHandle для редактирования некоторого файла, но он не редактируется.Не удалось редактировать первый байт файла с помощью 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]; 

Есть предложения?

ответ

3

Если вы хотите написать с помощью NSFileHandle вам нужно открыть файл для записи, а также чтение:

NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath]; 

Если вы не уверены в том случае, если файл по указанному пути перезаписывает, вы должны проверить для соответствующих разрешений, прежде чем открывать его и показывать пользователю ошибку, если они недостаточны для того, что вам нужно сделать.

Кроме того, для записи данных необходимо создать экземпляр NSData. Строка кода

NSData *zeroData = 0; 

создает nil объект, а не объект, содержащий нулевой байт. Я думаю, вы хотите

int8_t zero = 0; 
NSData *zeroData = [NSData dataWithBytes:&zero length:1]; 
+0

Спасибо sbooth за беспокойство. Как вы можете предположить, я изменил NSFileHandle на NSFileHandle * fileHandle = [NSFileHandle fileHandleForUpdatingAtPath: filePath]; Но до сих пор не обновлялся 1-й байт. что вы думаете? – iDilip

+0

Спасибо большое sbooth :) Его работа. для вас ++++++ 11111 – iDilip

Смежные вопросы