重写文件上的行

问题描述:

我需要重写文件上的字符,或者删除一些行。有没有办法实现这一点,而不重写整个文件?重写文件上的行

例如:我需要在第10行用char“4”来改变字符“8”。

pollo 
ciao fred 
98/98/34 42ddw 
4 
10 
1234567890 
cristo 
ciao liby 
98/98/34 fre42ddw 
8 
20 
123456789
+0

否 - 如果您需要在文件中添加或删除字符,则不可能不重写该文件 - 请参阅[从C语言文件中删除行](http:// stackoverflow。 com/questions/1151713/delete-a-file-in-c-language)等等。如果你只是在原地替换一个角色,这是可能的。 –

int fseek (stream, offset, origin); 

您可以移动到特定的偏移和书写符号存在。但要找到替代字符的偏移量,仍然需要先读取所有符号。

如果您确切知道char的位置,则可以使用fseekfputc。如果没有,你应该首先输入fread这个文件并找到需要的位置。有关其他实用功能,请参阅<stdio.h>

请注意,<stdio.h>是基于字节的,而不是基于行的。使用基于行的方法,您基本上需要重写该文件。

对于从文件中删除行,好,你可以刚刚从位置i + [end of the line to be deleted] + 1到位置i + [start of the line to be deleted]传输的所有字符。或者将整体读入缓冲区并操纵那里的角色。但对于这样的任务,基于行的功能更合适。

简而言之,是的,您可以使用random-access API methods修改文件中任意位置的数据。当然,操作系统和文件系统如何在幕后处理这个问题,可能会导致整个文件被重写。