讀一個文件,從頭到尾的讀,不是一行一行的讀

想用正則匹配特徵,忽然想起不能一行行匹配,應該對文件從頭到位的匹配免得人家分在多行了匹配不到,通過百度知道了有這麼幾個好用的函數,或者說以前我木有用過的函數.

feek:改變流的位置,int fseek(FILE *stream, long offset, int fromwhere);成功,返回0,失敗返回-1,並設置errno的值,可以用perror()函數輸出錯誤。

,ftell: <stdio.h>  返回當前文件位置,也就是說返回FILE指針當前位置。long ftell(FILE *stream);函數 ftell() 用於得到文件位置指針當前位置相對於文件首的偏移字節數。

perror:    #include<stdio.h>#include<stdlib.h>                 void perror(const char *s); perror ("open_port");    perror( ) 用來將上一個函數發生錯誤的原因輸出到標準設備                 (stderr)。參數 s 所指的字符串會先打印出,後面再加上錯誤原因字符串。此錯誤原因依照全局變量errno 的值來決定要輸出的字符串。
rewind:  將文件內部的位置指針重新指向一個流(數據流/文件)的開頭,rewind函數作用等同於 (void)fseek(stream, 0L, SEEK_SET);[1]
注意:不是文件指針而是文件內部的位置指針,隨着對文件的讀寫文件的位置指針(指向當前讀寫字節)向後移動。而文件指針是指向整個文件,如果不重新賦值文件指針不會改變。


#include <stdio.h>
#include <stdlib.h>
int main()
{
 char *pchBuf = NULL;
 int  nLen = 0;
 FILE *pF  = fopen(__FILE__, "r"); //打開文件

 fseek(pF, 0, SEEK_END); //文件指針移到文件尾
 nLen = ftell(pF);  //得到當前指針位置, 即是文件的長度
 rewind(pF);    //文件指針恢復到文件頭位置

 //動態申請空間, 爲保存字符串結尾標誌\0, 多申請一個字符的空間
 pchBuf = (char*) malloc(sizeof(char)*nLen+1);
 if(!pchBuf)
 {
  perror("內存不夠!\n");
  exit(0);
 }

 //讀取文件內容//讀取的長度和源文件長度有可能有出入,這裏自動調整 nLen
 nLen = fread(pchBuf, sizeof(char), nLen, pF);

 pchBuf[nLen] = '\0'; //添加字符串結尾標誌

 printf("%s\n", pchBuf); //把讀取的內容輸出到屏幕看看

 fclose(pF);  //關閉文件
 free(pchBuf); //釋放空間

 return 0;
}


讀一行呢,是這樣子的:

/* read a line from web page file */

        //if(!feof(addr))
        //{
            //while(fgets(lbuf, 256, addr))
        //{
        
            //  if ((z = strlen(lbuf)) > 0 &&( lbuf[z-1]==('\n')))
            //    lbuf[z - 1] = 0; //strip tail \n 
             //   printf("%s%s",pattern,lbuf);  
              //regerror(z, &reg, errbuf, sizeof(errbuf));
             // if (z == REG_NOMATCH) continue;
            //    else break;

            //}
        //}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章