![]() |
#2
天使梦魔2015-01-24 19:47
|
C++中的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;
}
#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;
}
结果:
只有本站会员才能查看附件,请 登录