65,211
社区成员
发帖
与我相关
我的任务
分享#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
FILE * fp;
char *buffer = new char[100];
char ch;
fp = fopen("c:\\abc.txt","a+");
if (fp == NULL)
cout < <"Open FILE ERROR";
else
cout < <"Open FILE SUCCESSFUL" < <endl;
while(!feof(fp))
{
ch=fgetc(fp);
if(ch!=EOF)
{
cout < < ch;
fgets(buffer,100,fp);
cout < <buffer;
long pos = ftell(fp);
cout < <pos < <endl;
if (strstr(buffer,"you"))
{
fseek(fp,0,SEEK_END);
fprintf(fp,"%s\n","888888");
cout < <ftell(fp) < <endl;
//break;
cout < <buffer;
}
cout < <"wait..." < <endl;
//fseek(fp,pos,SEEK_SET); 如将此处注释回复,程序运行正常 --------------注意pos
continue;
}
}
fclose(fp);
delete buffer;
buffer = NULL;
return 0;
}
程序目的:读取文件,当文件内容含有“you”时在文件末尾添加字符串“8888888”,当读取文件结束后退出
实验发现:当程序没有指定//fseek(fp,pos,SEEK_SET)时文件一直再写入文件,并且写入的内容很蹊跷
文件abc.txt
222222333estsdfsdfsdyou are bestyou
利用本程序则写入后的文件为:
222222333estsdfsdfsdyou are bestyou
888888
33estsdfsdfsdyou are bestyou
888888
33estsdfsdfsdyou are bestyou
888888
33estsdfsdfsdyou are bestyou
888888
33estsdfsdfsdyou are bestyou
888888
33estsdfsdfsdyou are bestyou
888888
33estsdfsdfsdyou are bestyou
888888
33estsdfsdfsdyou are bestyou
888888
33estsdfsdfsdyou are bestyou
......
FILE * fp;
char *buffer = new char[100];
char ch;
fp = fopen("abc.txt","a+");
if (fp == NULL)
cout <<"Open FILE ERROR";
else
cout <<"Open FILE SUCCESSFUL" <<endl;
while(!feof(fp))
{
ch=fgetc(fp);
if(ch!=EOF)
{
cout << ch;
fgets(buffer,100,fp);
cout <<buffer;
long pos = ftell(fp);
cout <<pos <<endl;
if (strstr(buffer,"you"))
{
fseek(fp,0,SEEK_END);
fprintf(fp,"%s\n","888888");
cout <<ftell(fp) <<endl;
//break;
cout <<buffer;
}
cout <<"wait..." <<endl;
pos = ftell(fp); //指针位置要及时更新!!!
fseek(fp,pos,SEEK_SET);// 如将此处注释回复,程序运行正常
continue;
}
}
fclose(fp);
delete buffer;
buffer = NULL;
return 0; FILE * fp;
char *buffer = new char[100];
char ch;
fp = fopen("abc.txt","a+");
if (fp == NULL)
cout <<"Open FILE ERROR";
else
cout <<"Open FILE SUCCESSFUL" <<endl;
while(!feof(fp))
{
ch=fgetc(fp);
if(ch!=EOF)
{
cout << ch;
fgets(buffer,100,fp);
cout <<buffer;
long pos = ftell(fp);
cout <<pos <<endl;
if (strstr(buffer,"you"))
{
fseek(fp,0,SEEK_END);
fprintf(fp,"%s\n","888888");
cout <<ftell(fp) <<endl;
//break;
cout <<buffer;
}
cout <<"wait..." <<endl;
pos = ftell(fp);
fseek(fp,pos,SEEK_SET);// 如将此处注释回复,程序运行正常
continue;
}
}
fclose(fp);
delete buffer;
buffer = NULL;
return 0;