2012-05-12 2 views
1

Я хочу перезаписать текущие данные в начале моего текстового файла, называемого data.txt (в папке моих ресурсов). Всегда будет только одна строка (без пробелов или чего-то еще), и я хочу, чтобы эта строка была перезаписана, когда это необходимо. Это то, как я делал это до сих пор, но это только пишет содержимое в конце файла и не начинается с самого начала или перезаписывает нужную мне строку. Если кто-нибудь может мне помочь, это будет оценено по достоинству. Благодаря!Перезапись текущего содержимого в файле

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

//append filename to docs directory 
NSString *myPath = [documentsDirectory stringByAppendingPathComponent:@"data.txt"]; 
fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:myPath]; 

writtenString= [[NSString alloc]initWithFormat:@"%d", message];  

[fileHandle seekToEndOfFile]; 
[fileHandle writeData:[writtenString dataUsingEncoding:NSUTF8StringEncoding]]; 

[writtenString release]; 

ответ

2

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

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

У вас есть две основные операции: вы можете обрезать файл на определенную длину, возможно, 0, отбрасывая любые старые данные за эту точку. И вы можете писать данные в определенной позиции. Если в этой позиции уже были данные, они перезаписываются (т. Е. Теряются). Если диапазон байтов, к которому вы пишете, проходит мимо конца файла, файл расширяется.

Однако любые старые данные, которые вы ни урезали, ни перезаписали, остаются там, где они есть. Ни в коем случае он не перемещается.

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

+0

Спасибо за подробное объяснение! –

1

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

Ну, да, потому что вы звоните:

[fileHandle seekToEndOfFile]; 

и делает то, что вы просили. Попробуйте: ответ

[fileHandle seekToFileOffset: 0]; 
+0

Спасибо Mike проверит его –

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