我在C中乱用搜索指针,我的练习是将数据库(格式:ID NAME SURNAME AGE)写入文本文件。 所以一切正常(保存新数据等),但我找不到如何删除文本文件中的行的解决方案。
void cut_from_file(char* filename, int start, int stop) {
FILE *fp = fopen(filename, "w");
fpos_t position;
fseek(fp, 34, SEEK_SET);
fputs("Hello world", fp);
fclose (fp);
}
注意:我想以某种方式使其成为随机访问文件。
所以我的问题是如何移动文件指针让前面说34个字符并覆盖该位置上的字符,但保留0到33位的字符呢?
如果我在上面的测试功能中尝试这样做,我会使用' / 00'覆盖偏移0 - 33中的所有内容。在第34位是Hello World。
答案 0 :(得分:3)
fopen(文件名," r +")就是答案,天哪我搞砸了。
谢谢大家:)
答案 1 :(得分:1)
使用SEEK_CUR
代替SEEK_SET
从当前索引向前移动。 SEEK_SET
从文件开头向前带你34个字符。还" w"在打开文件时会覆盖其所有内容。
答案 2 :(得分:1)
没有办法简单地让文件的一大块消失。
我可以看到两种可能的解决方案:
答案 3 :(得分:0)
要从文件中删除一行,您可以打开一个临时文件并逐行写入内容,然后跳过要删除的行,以后可以用临时文件替换原始文件。 / p>
答案 4 :(得分:0)
(1)将最后一个条目移动到要删除的条目。 (2)调用truncate缩短文件。