『壹』 怎樣用C語言高效的讀取一個70M 左右的txt文件並,如果用malloc函數的話怎麼實現呢
現成的程序, 有英文詳細解釋
#include <stdio.h>
#include <stdlib.h>
int main () {
FILE * pFile;
long lSize;
char * buffer;
size_t result;
pFile = fopen ( "myfile.bin" , "rb" );
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
// obtain file size: 獲取文件大小
fseek (pFile , 0 , SEEK_END); //竅門 1
lSize = ftell (pFile); // 竅門 2
rewind (pFile);
// allocate memory to contain the whole file: //動態分配
buffer = (char*) malloc (sizeof(char)*lSize);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
// the file into the buffer: // 文件復制到 緩沖變數
result = fread (buffer,1,lSize,pFile);
if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
/* the whole file is now loaded in the memory buffer. */ // 整個文件在 buffer 里
// terminate
fclose (pFile); // 關閉文件
free (buffer); // 釋放
return 0;
}
『貳』 最近遇到個用C語言進行大文件處理的問題,以前沒做過,希望各路高手給點方法。
問題:1,用C語言如何讀取大文件?(要用內存映射及64位的API嗎?)
答:分批處理,和普通文件一樣。就是多循環幾次。
2,如何統計文件里的行數?
答:統計文件中的換行字元個數。分批處理,計算。同時存儲倒數第1000個回車符的文件指針位置。
3,如何讀取文件中一行的數據?(fgets() api?)
答:識別換行字元。
問:讀取最後的一千行的單位名稱。
答:為了效率,打開文件後,就定位到倒數第1000個回車符的文件指針位置,進行讀取。以換行符為分割來提取。
『叄』 c語言處理文件里的大數據
只能分塊處理了,讀入一塊、處理一塊、存儲一塊,資料庫就是這么乾的。
『肆』 用C語言,讀取文件的大小,同時計算可以把文件分成多少塊32K大小的塊,而餘下的那部分的大小是多少
#include<stdio.h>
intmain()
{
intn=0;
FILE*fp;
fp=fopen("test.txt","rb");
if(fp==NULL)return1;
while(fgetc(fp)!=EOF)n++;
printf("文件大小為%d位元組 ",n);
printf("可以分成%d塊32K ",n/(1024*32));
printf("餘下的那部分的大小為%d位元組 ",n%(1024*32));
fclose(fp);
return0;
}