windows 与linux 下用C++读取sqlite实现文件复制(三)

5.实现文件复制

 1 int CopyFile(char *SourceFile,char *NewFile)
 2 {
 3     ifstream in;
 4     ofstream out;
 5     in.open(SourceFile,ios::binary);//打开源文件
 6     if(in.fail())//打开源文件失败
 7     {
 8         cout<<"Error 1: Fail to open the source file."<<endl;
 9         in.close();
10         out.close();
11         return 0;
12     }
13     out.open(NewFile,ios::binary);//创建目标文件 
14     if(out.fail())//创建文件失败
15     {
16         cout<<"Error 2: Fail to create the new file."<<endl;
17         out.close();
18         in.close();
19         return 0;
20     }
21     else//复制文件
22     {
23         out<<in.rdbuf();
24         out.close();
25         in.close();
26         return 1;
27     }
28 }

linux c++ 拷贝文件问题

自动包括子目录;
通过命令行参数完成<[源路径]源文件><目的路径>
要求源文件名支持通配符‘*’,例如:*.zip或*.rar,支持上述两种格式即可; 
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <stdio.h>
#include <iostream>
#include <windows.h>
 1 /*********************************************************************
 2 功能:复制文件
 3 参数:pSrc,原文件名
 4 pDes,目标文件名
 5 返回:<0,失败
 6 >0,成功
 7 作者:
 8 *********************************************************************/
 9 #define BUF_SIZE    256
10 int copyFile(const char * pSrc,const char *pDes)
11 {
12     FILE *in_file, *out_file;
13     char data[BUF_SIZE];
14     size_t bytes_in, bytes_out;
15     long len = 0;
16     if ( (in_file = fopen(pSrc, "rb")) == NULL )
17     {
18         perror(pSrc);
19         return -2;
20     }
21     if ( (out_file = fopen(pDes, "wb")) == NULL )
22     {
23         perror(pDes);
24         return -3;
25     }
26     while ( (bytes_in = fread(data, 1, BUF_SIZE, in_file)) > 0 )
27     {
28         bytes_out = fwrite(data, 1, bytes_in, out_file);
29         if ( bytes_in != bytes_out )
30         {
31             perror("Fatal write error.\n");
32             return -4;
33         }
34         len += bytes_out;
35         printf("copying file .... %d bytes copy\n", len);
36     }
37     fclose(in_file);
38     fclose(out_file);
39     return 1;
40 }
41 
42 /*********************************************************************
43 功能:复制(非空)目录
44 参数:pSrc,原目录名
45 pDes,目标目录名
46 返回:<0,失败
47 >0,成功
48 作者:
49 *********************************************************************/
50 int copyDir(const char * pSrc,const char *pDes)
51 {
52     if (NULL == pSrc || NULL == pDes) return -1;
53     mkdir(pDes);
54     char dir[MAX_PATH] = {0};
55     char srcFileName[MAX_PATH] = {0};
56     char desFileName[MAX_PATH] = {0};
57     char *str = "\\*.*";
58     strcpy(dir,pSrc);
59     strcat(dir,str);
60     //首先查找dir中符合要求的文件
61     long hFile;
62     _finddata_t fileinfo;
63     if ((hFile = _findfirst(dir,&fileinfo)) != -1)
64     {
65         do
66         {
67             strcpy(srcFileName,pSrc);
68             strcat(srcFileName,"\\");
69             strcat(srcFileName,fileinfo.name);
70             strcpy(desFileName,pDes);
71             strcat(desFileName,"\\");
72             strcat(desFileName,fileinfo.name);
73             //检查是不是目录
74             //如果不是目录,则进行处理文件夹下面的文件
75             if (!(fileinfo.attrib & _A_SUBDIR))
76             {
77                 copyFile(srcFileName,desFileName);
78             }
79             else//处理目录,递归调用
80             {
81                 if ( strcmp(fileinfo.name, "." ) != 0 && strcmp(fileinfo.name, ".." ) != 0 )
82                 {
83                     copyDir(srcFileName,desFileName);
84                 }
85             }
86         } while (_findnext(hFile,&fileinfo) == 0);
87         _findclose(hFile);
88         return 1;
89     }
90     return -3;
91 }
View Code

 

转载于:https://www.cnblogs.com/zxqdlenovo/p/4112069.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值