C語言fgets讀取整個文字檔案的內容
阿新 • • 發佈:2019-02-05
#include <stdio.h> #include <stdlib.h> #include <string.h> int test_fgets(const char* filePath) { FILE* fp=fopen(filePath,"r"); if(fp==NULL) { printf("open error!%s",strerror(errno)); return -1; } char buffer[2048]={0}; while(fgets(buffer,sizeof(buffer),fp)) { printf("%s",buffer); } fclose(fp); return 0; } char* getAllFileData2(char *filePath) { FILE *fp; char *str; char buffer[4096]; int filesize; if ((fp=fopen(filePath,"r"))==NULL){ printf("開啟檔案%s錯誤 error=%s \n",filePath,strerror(errno)); return NULL; } fseek(fp,0,SEEK_END); filesize = ftell(fp); str=(char *)malloc(filesize+1); memset(str,0,filesize+1); rewind(fp); int bufsize=sizeof(buffer); //fgets的快取大小隻能為bufsize? 如果一個行資料很長怎麼辦? while((fgets(buffer,bufsize,fp))!=NULL){ //每次最多讀取bufsize-1個字元 strcat(str,buffer); } fclose(fp); return str; } char* getAllFileData(char *filePath) { FILE *fp; char *str; char buffer[4096]; int filesize; if ((fp=fopen(filePath,"r"))==NULL){ printf("開啟檔案%s錯誤 error=%s \n",filePath,strerror(errno)); return NULL; } fseek(fp,0,SEEK_END); filesize = ftell(fp); str=(char *)malloc(filesize+1); memset(str,0,filesize+1); rewind(fp); int bufsize=sizeof(buffer); //fgets函式成功將返回buf,失敗或讀到檔案結尾返回NULL。因此我們不能直接通過fgets的返回值來判斷函式是否是出錯而終止的,應該藉助feof函式或者ferror函式來判斷。 while(!feof(fp)){ fgets(buffer,bufsize,fp); strcat(str,buffer); } fclose(fp); return str; } int main(void) { test_fgets("d:/test.txt"); printf("=====================================\n"); char *p; p=getAllFileData("d:/test.txt"); if (p!=NULL) { puts(p); free(p); } return 0; }