文件拷贝(复制粘贴)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013421892/article/details/80724948

我们几乎天天用到复制粘贴,做开发人员的我们有没有想过其原理那?
其实复制粘贴就是文件操作,只不过是文件读写,再说明白点就是文件拷贝操作,那我们就一起看看文件拷贝的实现。

1.C++实现:

#include <iostream>
#include <fstream>
#include <ctime>

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<<"命令错误!"<<endl;
    return -1;
    }

    if(!infile)
    {
        cerr<<"文件打开失败!"<<endl;
        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<<iFilesize<<endl;

    infile.close();
    outfile.close();
    time(&t2);

    //  cout<<"文件拷贝成功!"<<endl;
    cout<<"拷贝用时:"<<t2-t1<<endl;

    return 0;
}

2.C语言实现:

#include <stdio.h>
#include <time.h>

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;
}

3.Window API实现:

/*
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;
}

猜你喜欢

转载自blog.csdn.net/u013421892/article/details/80724948