文件操作 fseek

yel617 2012-05-15 02:06:45
需要用文件来保存报警信息
有报警的时候将报警信息写入文件
最新的报警信息要一直写在文件的第一行
fp = fopen("alarmlog.cfg", "a");

fwrite(alarmbuf, sizeof(alarmbuf), 1, fp);
fseek(fp, 0, SEEK_SET);

这样写fseek好像没起作用,指针没有移到文件开头

这是怎么回事啊 ?

...全文
153 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
景语 2012-05-16
  • 打赏
  • 举报
回复
你如果用a或者a+打开
fseek(fp, 0, SEEK_SET);
都是将文件指针移至打开文件前的文件结尾处。
景语 2012-05-16
  • 打赏
  • 举报
回复
不影响原内容的情况下将alarm信息写道第一行

#include <stdio.h>

int main()
{
FILE *fp;

fp = fopen("test.cfg", "r+");
fseek(fp, 0, SEEK_SET);

char alarmBuf[6] = "ALARM!";
fwrite(alarmBuf, sizeof(alarmBuf), 1, fp);

fclose(fp);

return 0;
}
mzliming 2012-05-16
  • 打赏
  • 举报
回复
"a",每次写入的数据都会被加到文件尾后,你这fseek没有用的,建议多看一下这方面的知识
我想到的思路是:先把文件中的数据存起来,再写入新数据,然后把存起来的数据写入

fp = fopen("alarmlog.cfg", "r+");
char *FileDataTemp;

fseek(fp, 0, SEEK_END);
long FileLeng = ftell(fp)+1;
fseek(fp, 0, SEEK_SET);
FileDataTemp = (char *)malloc(FileLeng);
memset(FileDataTemp, 0, FileLeng);
fread(FileDataTemp, FileLeng, 1, fp);
fclose(fp);
fp = fopen("alarmlog.cfg", "w+");
fwrite(alarmbuf, sizeof(alarmbuf), 1, fp);
fwrite(FileDataTemp, FileLeng, 1, fp);


free(FileDataTemp);
FileDataTemp = NULL;
fclose(fp);
以上代码供楼主参考
赵4老师 2012-05-15
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。
robertbo 2012-05-15
  • 打赏
  • 举报
回复
fseek以后也只能覆盖,要实现楼主说的功能只能是先读出来,然后将最新的信息添加到头部,然后再写,使用fopen("alarmlog.cfg", "w+b")
qq120848369 2012-05-15
  • 打赏
  • 举报
回复
文件不能插入,只会覆盖,考虑使用数据库吧。
liangbch 2012-05-15
  • 打赏
  • 举报
回复
楼上正解。
W170532934 2012-05-15
  • 打赏
  • 举报
回复
我觉得看来你需要把原来的内容读取到内存后,重新往文件里写了。
yel617 2012-05-15
  • 打赏
  • 举报
回复
返回值是正确的[Quote=引用 2 楼 的回复:]

看看fseek函数调用后的返回值吧,看看有没有成功。
[/Quote]
yel617 2012-05-15
  • 打赏
  • 举报
回复
顺序颠倒过来也不行
把fp = fopen("alarmlog.cfg", "a");改成fp = fopen("alarmlog.cfg", "w+");可以
但是这样每次写入都会把以前的给删了[Quote=引用 1 楼 的回复:]

fwrite(alarmbuf, sizeof(alarmbuf), 1, fp);
fseek(fp, 0, SEEK_SET);

把这两句的执行顺序,颠倒一下
[/Quote]
W170532934 2012-05-15
  • 打赏
  • 举报
回复
看看fseek函数调用后的返回值吧,看看有没有成功。
nature_wind 2012-05-15
  • 打赏
  • 举报
回复
fwrite(alarmbuf, sizeof(alarmbuf), 1, fp);
fseek(fp, 0, SEEK_SET);

把这两句的执行顺序,颠倒一下

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧