Objective c 覆盖文件中的当前内容

Objective c 覆盖文件中的当前内容,objective-c,ios,xcode,Objective C,Ios,Xcode,我想覆盖名为data.txt的文本文件(在我的资源文件夹中)开头的当前数据。始终只有一行(没有空格或任何内容),我希望在适当的时候覆盖这一行。到目前为止,我一直都是这样做的,但这只是在文件末尾写入内容,而不是从一开始就开始覆盖我需要的行。如果有人能帮助我,我将不胜感激。谢谢 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *doc

我想覆盖名为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];
到目前为止,我一直都是这样做的,但这只是在文件末尾写入内容,而不是从一开始就开始覆盖我需要的行

嗯,是的,因为你打电话:

[fileHandle seekToEndOfFile];
它正在按你的要求做。尝试:

[fileHandle seekToFileOffset: 0];

Mike的回答将允许您覆盖文件的内容,但不会像您想象的那样以行为导向

您不能调整文件的内部内容,这样,如果插入内容,现有的以下数据将在以后被推送;如果删除内容,现有的以下数据将在删除点之后被拉起

您有两个基本操作可用:您可以将文件截断为特定长度(可能为0),丢弃超过该长度的任何旧数据。您可以在某个位置写入数据。如果该位置已经有数据,则会覆盖(即丢失)。如果要写入的字节范围超出了文件的末尾,则文件将被扩展

但是,任何既没有被截断也没有过度编写的旧数据都会保留在原来的位置。它决不会移动


因此,如果您想要更改文本文件的第一行,并且如果您不能确定新行与旧行的长度完全相同,那么您必须注意将所有内容从第二行移动到新位置。一种适用于小文件的简单方法是将整个内容读入内存,在内存中进行调整,然后再将其全部写出来。另一种方法是对文件进行迭代,分块读取,然后在新位置将其写出。如果将数据移向起点,则从起点开始;如果要将数据移到末尾,则从末尾开始。

谢谢Mike会检查出来的谢谢您的详细解释!