看到百度百科这么一句话,顿时没有任何语言了。
来自:http://baike.baidu.com/view/32758.htmC++中的FILE
需要加入stdio来使用FILE。
格式:FILE *name = fopen(filename,type);
filename是文件名
type是指示文件读取方式的字符串:
"r" = read "w" = write "rw" = read&write
定义*name后,便可以使用fprintf(*FILE,string,var1,var2,..)来快速读入读出文件了。
利用FILE* 和fprintf的文件I/O速度是使用fstream文件流的256倍。
需要加入stdio来使用FILE。
格式:FILE *name = fopen(filename,type);
filename是文件名
type是指示文件读取方式的字符串:
"r" = read "w" = write "rw" = read&write
定义*name后,便可以使用fprintf(*FILE,string,var1,var2,..)来快速读入读出文件了。
利用FILE* 和fprintf的文件I/O速度是使用fstream文件流的256倍。
于是自己弄了一下,就是不知道这个256倍是怎么得出来的:
程序代码:
#include <iostream> #include <fstream> #include <windows.h> #include <stdio.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int sum; char file[1024]; ifstream in; in.open("1.exe",ios::binary); in.seekg(0,ios::end); sum=in.tellg(); char* file1=new char[sum]; cout<<"文件大小:"<<sum<<"字节"<<endl; //------------------一次读入1024字符------------------ in.seekg(0,ios::beg); DWORD start_time1=GetTickCount();//计时开始 for(unsigned int i=0;i<sum/1024;i++) { in.read(file,1024); for(int s=0;s<1024;s++)file1[i*1024+s]=file[s]; } if(sum%1024) { in.read(file,1024); for(int s=0;s<sum%1024;s++)file1[sum-1024+s]=file[s]; } DWORD end_time1=GetTickCount();//计时结束 cout<<"C++文件流每次读1024字符失去毫秒:"<<(end_time1-start_time1)<<"ms!"<<endl; //------------------一个一个的读------------------ in.seekg(0,ios::beg); DWORD start_time2=GetTickCount();//计时开始 for(unsigned int i=0;i<sum;i++) { in.get(file1[i]); } DWORD end_time2=GetTickCount();//计时结束 cout<<"C++文件流每次读1个字符失去毫秒:"<<(end_time2-start_time2)<<"ms!"<<endl; //------------------fopen读------------------ FILE* f=fopen("1.exe","rb+"); DWORD start_time3=GetTickCount();//计时开始 for(unsigned int i=0;i<sum/1024;i++) { fread(&file,sizeof(char),1024,f); for(int s=0;s<1024;s++)file1[i*1024+s]=file[s]; } if(sum%1024) { fread(&file,sizeof(char),1024,f); for(int s=0;s<sum%1024;s++)file1[sum-1024+s]=file[s]; } DWORD end_time3=GetTickCount();//计时结束 cout<<"C文件流每次读入1024个字符失去毫秒:"<<(end_time3-start_time3)<<"ms!"<<endl; delete []file1; in.close(); fclose(f); cin.get(); return 0; }
结果: