欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用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,fscanffseek,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語言替換文件中某一行的方法到這就基本結束了,大家都學會了嗎?希望這篇文章的內容對大家的學習和工作能帶來一定的幫助,如果有疑問,大家可以留言交流。

相關文章

  • 順序線性表的代碼實現方法

    順序線性表的代碼實現方法

    下面小編就為大家?guī)硪黄樞蚓€性表的代碼實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • C++開發(fā)之CRC校驗實例詳解

    C++開發(fā)之CRC校驗實例詳解

    這篇文章主要介紹了C++開發(fā)之CRC校驗實例詳解的相關資料,需要的朋友可以參考下
    2017-07-07
  • C++模板以及實現vector實例詳解

    C++模板以及實現vector實例詳解

    模板是為了實現泛型編程,所謂泛型編程,就是指編寫與類型無關的代碼,下面這篇文章主要給大家介紹了關于C++模板以及實現vector的相關資料,需要的朋友可以參考下
    2021-11-11
  • EasyC++靜態(tài)持續(xù)變量

    EasyC++靜態(tài)持續(xù)變量

    這篇文章主要介紹了EasyC++靜態(tài)持續(xù)變量,除了自動存儲變量之后,C++當中還有靜態(tài)持續(xù)變量。關于靜態(tài)持續(xù)變量的定義C++和C語言是一樣的,它擁有三種鏈接性,即外部鏈接性、內部連接性和無鏈接性,下面一起進入文章了解更具體內容吧
    2021-12-12
  • C語言中pthread_exit()函數實現終止線程

    C語言中pthread_exit()函數實現終止線程

    本文主要介紹了C語言中pthread_exit()函數實現終止線程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • C++超詳細講解操作符的重載

    C++超詳細講解操作符的重載

    C++預定義中的運算符的操作對象只局限于基本的內置數據類型,但是對于我們自定義的類型(類)是沒有辦法操作的。但是大多時候我們需要對我們定義的類型進行類似的運算,這個時候就需要我們對這么運算符進行重新定義,賦予其新的功能,以滿足自身的需求
    2022-06-06
  • 深入淺析C/C++語言結構體指針的使用注意事項

    深入淺析C/C++語言結構體指針的使用注意事項

    這篇文章主要介紹了C/C++語言結構體指針的使用,大家都知道指針在32位系統(tǒng)占用4Byte,在64位系統(tǒng)占用8Byte,下面看下c語言代碼例子
    2021-12-12
  • C++實現LeetCode(兩個有序數組的中位數)

    C++實現LeetCode(兩個有序數組的中位數)

    這篇文章主要介紹了C++實現LeetCode(兩個有序數組的中位數),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • libevent庫的使用方法實例

    libevent庫的使用方法實例

    這篇文章主要介紹了libevent庫的使用方法實例,有需要的朋友可以參考一下
    2013-12-12
  • C++數據結構之單鏈表

    C++數據結構之單鏈表

    這篇文章主要介紹了C++數據結構之單鏈表,鏈表是由一個個結點鏈結成的。結點包括數據域和指針域兩部分,數據域用來存儲數據元素的信息,指針域用來存儲下一個結點的地址,更詳細內容請需要的小伙伴參考下面文章內容
    2022-01-01

最新評論