首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

文件操作 fseek解决方案

2012-05-27 
文件操作 fseek需要用文件来保存报警信息有报警的时候将报警信息写入文件最新的报警信息要一直写在文件的

文件操作 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信息写道第一行

C/C++ code
#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);
都是将文件指针移至打开文件前的文件结尾处。

热点排行