我们几乎天天用到复制粘贴,做开发人员的我们有没有想过其原理那?
其实复制粘贴就是文件操作,只不过是文件读写,再说明白点就是文件拷贝操作,那我们就一起看看文件拷贝的实现。
#include
#include
#include
using namespace std;
int main(int argc, char** argv)
{
ifstream infile("D:\\soft\\Windows 7 Ultimate x86.iso", ios::in|ios::binary);
ofstream outfile("F:\\soft\\Windows 7 Ultimate x86.iso", ios::out|ios::binary);
if(argc<3)
{
cerr<<"命令错误!"<return -1;
}
if(!infile)
{
cerr<<"文件打开失败!"<return -1;
}
time_t t1, t2;
char szBuff[1025];
time(&t1);
while(!infile.eof())
{
infile.read(szBuff, sizeof(szBuff));
outfile.write(szBuff, infile.gcount() );
}
int iFilesize=0;
infile.seekg(0, ios::end);
iFilesize=infile.tellg();
infile.seekg(0);
cout<// cout<<"文件拷贝成功!"<
cout<<"拷贝用时:"<return 0;
}
#include
#include
int main(int argc, char** argv)
{
if(argc<3)
{
printf("命令语法错误!\n");
return 0;
}
int iRet;
int szBuff[1024];
time_t t1,t2;
FILE* fp1=fopen(argv[1], "rb");
FILE* fp2=fopen(argv[2], "wb");
if(NULL==fp1)
{
printf("打开文件失败!\n");
return 0;
}
time(&t1);
while(!feof(fp1))
{
iRet=fread(szBuff, 1, sizeof(szBuff), fp1);
fwrite(szBuff, 1, iRet, fp2);
}
fclose(fp1);
fclose(fp2);
time(&t2);
printf("拷贝文件成功,共耗时%d秒!\n",t2-t1);
return 0;
}
/*
Winows实现文件的拷贝,
参数lpSrcFile 文件路径1
参数lpDesFile 文件路径2
*/
BOOL DJCopyFile(LPCTSTR lpSrcFile,LPCTSTR lpDesFile)
{
HANDLE hSrcFile=CreateFile(lpSrcFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
HANDLE hDesFile=CreateFile(lpDesFile,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hSrcFile==INVALID_HANDLE_VALUE || hDesFile==INVALID_HANDLE_VALUE) return FALSE;
char szBuff[1024];
DWORD dwBytesRead;
DWORD dwBytesWritten;
while(ReadFile(hSrcFile,szBuff,sizeof(szBuff),&dwBytesRead,NULL) && dwBytesRead!=0)
{
WriteFile(hDesFile,szBuff,dwBytesRead,&dwBytesWritten,NULL);
}
CloseHandle(hSrcFile);
CloseHandle(hDesFile);
return TRUE;
}