I need to rewrite a char on a file, or delete some lines. Is there a way to achieve this without rewriting the whole file?
Example: I need to change the 开发者_如何学Cchar "8" at line 10 with char "4".
pollo
ciao fred
98/98/34 42ddw
4
10
1234567890
cristo
ciao liby
98/98/34 fre42ddw
8
20
12345678901234567890
Look at
int fseek (stream, offset, origin);
You can move to a specific offset and write a symbol there. But to find an offset of char to replace you still need to read all symbols before it.
In a nutshell, yes, you can modify data at arbitrary positions in the file using random-access API methods. Of course, how the OS and filesystem handle this behind the scenes may result in the entire file being rewritten anyways.
You can use fseek
and fputc
, if you know exactly the position of the char. If not, you should better first fread
the file and find the needed position. For other utility functions, see <stdio.h>
.
Note that <stdio.h>
is byte-based, rather than line-based. With line-based methods you would basically need to rewrite the file.
For deleting line from the file, well, you can just transfer all the characters from the positions i + [end of the line to be deleted] + 1
to positions i + [start of the line to be deleted]
. Or read the whole into a buffer and manipulate the characters there. But for such a task, line-based functions are more appropriate.
精彩评论