读一个文件,从头到尾的读,不是一行一行的读

想用正则匹配特征,忽然想起不能一行行匹配,应该对文件从头到位的匹配免得人家分在多行了匹配不到,通过百度知道了有这么几个好用的函数,或者说以前我木有用过的函数.

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;

            //}
        //}



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