gpt4 book ai didi

C 程序 : How to properly use lseek() or fseek() to modify a certain part of a file?

转载 作者:太空宇宙 更新时间:2023-11-04 02:18:38 25 4
gpt4 key购买 nike

我有一个 CSV 格式的二进制文件,其中包含多条记录。每条记录都输入为 user_name、last_name、first_name、num_wins、num_losses、num_ties。我正在创建一种方法来更新特定玩家的输赢记录。用户输入要更改的用户名,然后更改输赢和平局。例如 smithj 4 5 1。这将找到 smithj 记录并将 4 添加到 wins 等。

如何使用 lseek 或 fseek 来完成此操作?或者还有其他方法吗?

最佳答案

响应编写示例的请求 - 假设固定大小的记录:

enum { RECSIZE = 256 };

char buffer[RECSIZE];
FILE *fp = ...; // File to read from and write to

int recnum = 37; // Counting from record 0
long offset = recnum * RECSIZE;

if (fseek(fp, offset, SEEK_SET) != 0)
...error...
if (fread(buffer, sizeof(buffer), 1, fp) != 1)
...error...
...modify buffer...
if (fseek(fp, offset, SEEK_SET) != 0)
...error...
if (fwrite(buffer, sizeof(buffer), 1, fp) != 1)
...error...

对于必须修改的每条记录,从recnum 的声明到结尾重复一次代码(思考循环)。

对于可变大小的记录,当您编辑它们时会改变大小,您必须更加努力地工作 - 以至于将旧文件一次一条记录复制到内存中,适本地修改记录,并且然后将修改后的记录写入新文件。

关于C 程序 : How to properly use lseek() or fseek() to modify a certain part of a file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3956222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com