利用C語言替換文件中某一行的方法
更新時間:2016年09月05日 15:17:59 作者:jfkidear
大家都知道C語言提供了文件操作,但是替換文件的某一行比較麻煩,下面是我使用的一個方法,現在分享給大家,有需要的朋友們可以參考借鑒。
文件中存貯的內容如下所示:
11 1122 0 1122 * * 0 0 22 222 0 222 * * 0 0 33 333 0 333 * * 0 0
通過使用下面的幾個函數,fopen,fprintf,fscanf,fseek,ftell 。
具體的函數函數原型如下所示:
FILE*fopen(const char*filename,const char *mode); int fprintf(FILE*stream,const char *format,...) int fscanf(FILE* stream,const char *format,...) int fseek(FILE*stream,long offset,int origin) long ftell(FILE* stream)
首先,數據寫入到文件中的是追加的形式。
具體的寫入代碼如下所示:
主要寫入時要指定每個數據的寬度,若不指定,當修改某行的數據,修改后的長度大于修改前得長度,將影響文件中的下一行。制定寬度之后,只要修改后的長度不大于制定的寬度,都不影響下面的內容。(這是注意點)
FILE *fp=fopen("clientinfo.txt","ar+");
Clientinfo info;
memset(&info,0,sizeof(Clientinfo));
。。。。
。。。。/*完成對info結構體的賦值*/
fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\
info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);
fprintf(fp,"\n");
fclose(fp);
修改處的代碼如下所示,整個代碼是我在MFC中實現的:
FILE *fp=fopen("clientinfo.txt","r+");
Clientinfo info;
long nline=0,n;
memset(&info,0,sizeof(Clientinfo));
int oldline=0;/*記錄匹配位置的前一行的偏移量*/
CString str;
while((n=fscanf(fp,"%s %s %d %s %s %s %d %d",info.id,info.nickname,\
&info.online,info.pwd,info.encryp,info.ip,&info.port,&info.fd))!=EOF)
{
str.Format("%d",nline);
MessageBox(str);
if(strncmp(info.id,id,id.GetLength())==0)/*查找要修改的位置*/
{
oldline=nline;
break;
}
nline=ftell(fp);
}
fseek(fp,oldline,SEEK_SET);/*定位到要修改的位置,注意,這個位置是上一次讀的最后,故寫的時候要先寫換行,第一行除外*/
if(oldline!=0)
{
fprintf(fp,"\n");
}
fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\
info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);
fprintf(fp,"\n");
fclose(fp);
下面是修改后的數據,修改第二行,沒有影響前后的數據。
11 1122 0 1122 * * 0 0
22 222f 0 222f * * 0 0
33 333 0 333 * * 0 0
總結
利用C語言替換文件中某一行的方法到這就基本結束了,大家都學會了嗎?希望這篇文章的內容對大家的學習和工作能帶來一定的幫助,如果有疑問,大家可以留言交流。

