在 C 中使用 fseek 随机访问文件

问题描述 投票:0回答:1

我试图在现有文件的中间写入一些数据,但是,尚不清楚使用什么模式打开。如果我用“w”打开它会截断文件,所以“a”似乎是显而易见的选择。我想做的是用“a”打开,然后寻找必要的位置。然而,当我这样做时,它总是写到最后:

FILE* t = fopen("ttt", "w");
fprintf(t, "1234567890");
fclose(t);
t = fopen("ttt", "a");
int result = fseek(t, 2, SEEK_SET);
fprintf(stderr, "%d", result);
fprintf(t, "xxx");
fclose(t);

我希望测试文件 ttt 包含“12xxx67890”,但它包含“1234567890xxx”。 (fseek的结果是0。)

关于如何实现这一目标有什么建议吗?

c filesystems
1个回答
0
投票

当您以“追加”模式打开文件时所有写入都发生在文件末尾。

MSVC 文档 说:

当使用

"a"
访问类型或
"a+"
访问类型打开文件时,所有写入操作都发生在文件末尾。文件指针可以使用 fseek 或 rewind 重新定位,但在执行任何写入操作之前始终移回文件末尾。因此,无法覆盖现有数据

要打开现有文件进行读取和写入,请使用

"r+"
模式。

© www.soinside.com 2019 - 2024. All rights reserved.