應用C說話調換文件中某一行的辦法。本站提示廣大學習愛好者:(應用C說話調換文件中某一行的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是應用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說話調換文件中某一行的辦法到這就根本停止了,年夜家都學會了嗎?願望這篇文章的內容對年夜家的進修和任務能帶來必定的贊助,假如有疑問,年夜家可以留言交換。