2013-08-06 4 views
0

Моего кода заменяет текст вместо того, чтобы вставить его, начиная с 5 символов:Как вставить данные в текстовый файл с помощью NSFileHandle

NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath: filePath]; 
[file seekToFileOffset: 5]; 

[file writeData: [value dataUsingEncoding:NSUTF8StringEncoding]]; 

Есть ли способ, чтобы вставить данные в текстовый файл?

+0

Ну, в соответствии с этим вопросом (http://stackoverflow.com/questions/4593418/inserting-a-string-at-a-specified-line-in-text-file-using-objective-c), это невозможно :( –

ответ

0

Это потому, что ваш код устанавливает индекс position to 5 и начинает писать оттуда, тем самым заменяя все от 5 и далее.

Я бы скопировал содержимое файла в переменную и изменил его там как string. , как, судя по ним, что вы пытаетесь сделать is not possible

Update: Учитывая то, что вам нужно, чтобы написать из X компенсировать это следует сделать трюк

NSFileHandle *file; 
     NSMutableData *data; 

     const char *bytestring = "black dog"; 

     data = [NSMutableData dataWithBytes:bytestring length:strlen(bytestring)]; 


     file = [NSFileHandle fileHandleForUpdatingAtPath: @"/tmp/quickfox.txt"]; 

     if (file == nil) 
       NSLog(@"Failed to open file"); 


     [file seekToFileOffset: 10]; 

     [file writeData: data]; 

     [file closeFile]; 
+0

Спасибо, я это знаю. Вопрос в том, как * вставить * тест из позиции 5 (не для * замены *) –

0

Ну это не может быть эффективный способ, но вы можете прочитать весь текстовый файл в NSMutableString, а затем использовать insertString: atIndex: а затем записать его обратно. Насколько я знаю, нет способа вставить текст в существующий файл. Similar question

Быстрый пример:

NSString *path = //Your file 
NSMutableString *contents = [NSMutableString stringWithContentsOfFile:txtFilePath encoding:NSUTF8StringEncoding error:NULL]; 

[contents insertString:@"Some string to insert" atIndex:5]; 
[contents writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 
0

Вставка данных где-то в последовательном файле будет требовать, чтобы весь файл переписывается. Однако можно добавить данные в конец файла без перезаписи файла.