文件操作 fseek
需要用文件来保存报警信息
有报警的时候将报警信息写入文件
最新的报警信息要一直写在文件的第一行
fp = fopen("alarmlog.cfg", "a");
fwrite(alarmbuf, sizeof(alarmbuf), 1, fp);
fseek(fp, 0, SEEK_SET);
这样写fseek好像没起作用,指针没有移到文件开头
这是怎么回事啊 ?
[解决办法]
fwrite(alarmbuf, sizeof(alarmbuf), 1, fp);
fseek(fp, 0, SEEK_SET);
把这两句的执行顺序,颠倒一下
[解决办法]
看看fseek函数调用后的返回值吧,看看有没有成功。
[解决办法]
我觉得看来你需要把原来的内容读取到内存后,重新往文件里写了。
[解决办法]
文件不能插入,只会覆盖,考虑使用数据库吧。
[解决办法]
fseek以后也只能覆盖,要实现楼主说的功能只能是先读出来,然后将最新的信息添加到头部,然后再写,使用fopen("alarmlog.cfg", "w+b")
[解决办法]
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。
[解决办法]
"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);
以上代码供楼主参考
[解决办法]
不影响原内容的情况下将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;}
[解决办法]
你如果用a或者a+打开
fseek(fp, 0, SEEK_SET);
都是将文件指针移至打开文件前的文件结尾处。