使用 fseek 和 fwrite 覆盖文件中的一行
Using fseek and fwrite to overwrite a line in a file
我有一个文本文件,其中每一行都以“\n”结尾。像这样
0000
0000
0000
0000
现在,一个文件最初像上面那样开始,但是一行可以被另一行可变长度覆盖。我正在使用 fseek()
来设置流的位置指示符。我可以毫无问题地移动到一行并将例如 0000
替换为 1111
。
现在假设我想用 1111 1111
替换第一行。我执行以下操作
char *str = "1111 1111\n";
fwrite(str, 1, strlen(str), file);
这会像这样删除第 2 行和第 3 行的 1 个字节
1111 1111
000
0000
这是什么原因?
如果您认为您的文件是这样的:
“0000\n0000\n0000\n0000\n”
当您覆盖第一行时,您实际上是在覆盖前 n 个字符,这样会更容易理解。
这就是为什么你的第二行消失了。
我有一个文本文件,其中每一行都以“\n”结尾。像这样
0000
0000
0000
0000
现在,一个文件最初像上面那样开始,但是一行可以被另一行可变长度覆盖。我正在使用 fseek()
来设置流的位置指示符。我可以毫无问题地移动到一行并将例如 0000
替换为 1111
。
现在假设我想用 1111 1111
替换第一行。我执行以下操作
char *str = "1111 1111\n";
fwrite(str, 1, strlen(str), file);
这会像这样删除第 2 行和第 3 行的 1 个字节
1111 1111
000
0000
这是什么原因?
如果您认为您的文件是这样的: “0000\n0000\n0000\n0000\n”
当您覆盖第一行时,您实际上是在覆盖前 n 个字符,这样会更容易理解。 这就是为什么你的第二行消失了。