【C】C语言写的快速复制文件内容的程序
这个程序的特点:1、先试图分配足够大的缓冲区来转储文件内容。如果分配不到足够大的缓冲区则逐字节复制文件内容。否则是逐块复制文件内容。
2、会自动记录复制的字节数量。但是不会有任何输出。
3、需要包含stdio.h
代码如下://-----------------------------------------------------------------------------//copyFILE:
//复制文件内容fpSrc到fpDest注意是参数fpDest在前。
//-----------------------------------------------------------------------------
size_t copyFILE(FILE*fpDest,FILE*fpSrc,size_t Len)
{
void*
pBuffer;//缓冲区
size_t
BufSize=Len,//缓冲区大小
BufAlloc=Len;//缓冲区分配大小
size_t
DataRest=Len;//剩余数据大小
size_t
DataCopied=0;//累计拷贝的数据量
if(!Len)//文件大小为0直接返回
return DataCopied;
//先分配足够大的内存来拷贝内容
do
{
if(!BufAlloc)//如果缓冲区大小为0则逐字节复制文件内容
{
while(DataRest--)
{
if(feof(fpSrc))//源到文件尾
return DataCopied;
//目标写入失败
if(fputc(fgetc(fpSrc),fpDest)==EOF)
return DataCopied;
DataCopied++;//统计写入字节数
}
return DataCopied;//完成拷贝
}
pBuffer=malloc(BufSize);//分配缓冲区
BufAlloc=BufSize;//记录缓冲区大小
BufSize>>=1;//如果内存不够就缓冲区大小减半
}while(pBuffer==NULL);
//分配到了内存,缓冲区大小为BufAlloc
//开始批量复制文件内容。
while(DataRest>=BufAlloc)//剩余数据量大于一个缓冲区
{
size_t
szDataRead,
szDataWrite;
szDataRead=fread(pBuffer,1,BufAlloc,fpSrc);//先读取文件到缓冲区并记录读取的量
szDataWrite=fwrite(pBuffer,1,szDataRead,fpDest);//然后写入缓冲区到文件并记录写入的量
DataRest-=szDataRead;
DataCopied+=szDataWrite;
if( szDataRead!=BufSize||//读取失败或者
szDataRead!=szDataWrite)//写入失败
return DataCopied;
}
if(DataRest)//如果还有剩余的数据
{
size_t
szDataRead,
szDataWrite;
szDataRead=fread(pBuffer,1,DataRest,fpSrc);//先读取文件到缓冲区并记录读取的量
szDataWrite=fwrite(pBuffer,1,szDataRead,fpDest);//然后写入缓冲区到文件并记录写入的量
//DataRest-=szDataRead;//暂时不需要
DataCopied+=szDataWrite;
}
return DataCopied;//返回已拷贝的数据量
}十分的简短。参数是文件流。
没有经过测试,不知道效果实际如何。但是经检查应该没有错误了吧?
页:
[1]