文件复制

转载 2015年07月10日 23:07:46
#include<fstream.h>
#include<iostream.h>
#include<io.h>
#include<string>
#include<cstring>
#include<direct.h>




/*
* 路径转换,将单斜杠转换成双斜杠
*/
void getDouble(char * str, int len, char * temp) //
{
char * start = NULL;
char * t = NULL;
start = str;
t = temp;
for(int i = 1; i <= len; i++, ++start) //循环len次,来处理'\'
{
if(* start == '\\') //当为'\'时,在后面再加入一个'\'
{
* t = * start;
++t;
* t = '\\';
++t;
}else{ //不为'\'时,原样复制到新空间
* t = * start;
++t;
}
}
* t = '\0';
//cout<<temp<<endl; //输出路径
}


/*
* 当有通配符*时,得到父路径
*/
void getParentPath(char * str, int len, char * temp) //得到父路径
{
char * start = NULL;
char * end = NULL;
char * t = NULL;
start = str;
end = str + (len - 1); //指向最后一个位置
t = temp;
while( * end != '\\'){  //将end指向'\'
end = end - 1;
}
++end; //将指针放到'\'后面


for(; start != end; start++) //将父路径写到temp中
{
* t = * start;
++t;
}
* t = '\0'; //加'\0'结束
//cout<<"Parent Path:"<<temp<<endl;
}
/*
* 得到目的路径
*/
void getDesPath(char * des, char * desPath) //得到目的路径
{
strcpy(desPath, (const char *)des);
strcat(desPath, "\\\\");
//cout<<"Des Path:"<<desPath<<endl;
}


void getCommend(char * p, char * src, char * des)
{
strcpy(p, "xcopy ");
strcat(p, (const char *)src);
strcat(p, " ");
strcat(p, (const char *)des);
strcat(p, " /s/e");


//cout<<"命令:"<<p<<endl;

}


void fileCopy(char * src, char * des){
long lf; //定义打开文件的句柄
_finddata_t file; //结构体,存储文件的信息
char currentPath[100];
char transSrcPath[100];
char transDesPath[100];
char desPath[100];
unsigned char buf[100];



if((lf = _findfirst((const char *)src, &file)) != -1L) //对c盘a文件夹进行复制
{
//cout<<"文件列表:"<<endl;
do  //如果找到下个文件名字成功的话
{
/*
cout<<file.name<<endl;
if(file.attrib == _A_NORMAL)
cout<<"普通文件"<<endl;
else if(file.attrib == _A_RDONLY)
cout<<"只读文件"<<endl;
else if(file.attrib == _A_HIDDEN)
cout<<"隐藏文件"<<endl;
else if(file.attrib == _A_SYSTEM)
cout<<"系统文件"<<endl;
else if(file.attrib == _A_SUBDIR)
cout<<"子目录"<<endl;
else cout<<"存档文件"<<endl;
*/
getDouble(src, strlen((const char *)src), transSrcPath); //将转换的源路径存入transPath
getParentPath(transSrcPath, strlen(transSrcPath), currentPath); //得到父路径 c:\\a\\

getDouble(des, strlen((const char *)des), transDesPath); //将转换的目的路径存入transDesPath
getDesPath(transDesPath, desPath); //得到目的路径 c:\\b\\



if(file.attrib == _A_SUBDIR){ //如果为子目录
/*
* 当为子目录的时候,利用系统的命令行参数
* 实现子目录以及子目录内文件的拷贝
*/


char dirPath[100];
char cmd[100];
getParentPath(src, strlen((const char *)src), dirPath);
strcat(dirPath, file.name); //构建目录的源路径 
//cout<<"目录路径:"<<dirPath<<endl; // c:\a\bbbabc
getCommend(cmd, dirPath, des);
system((const char *)cmd); //调用系统的命令行参数实现文件夹的拷贝


}else{ //如果不是目录
/*
* 当文件不是目录时,利用fstream文件输入输出流来对每个文件
* 进行读/写操作,从而,达到复制的效果
*/


ifstream fin((const char *)strcat(currentPath, file.name), ios::nocreate|ios::binary); //创建输入文件流
ofstream fout((const char *)strcat(desPath, file.name), ios::binary); //创建输入流

if(!fin){
cout<<"源文件路径没有找到!"<<endl;
return;
}
if(!fout){
cout<<"目的路径错误!"<<endl;
return;
}
while(!fin.eof()){ //实现文件的复制
fin.read(buf, sizeof(buf));
fout.write(buf, fin.gcount());
}
fin.close(); //关闭流
fout.close();
}

}while(_findnext(lf, &file) == 0);
cout<<"复制已完成!"<<endl;
_findclose(lf);
}else{
cout<<"源文件路径没有找到!"<<endl;
}
}


int main()
{
char src[100], des[100]; 
cout<<"请输入路径和源文件名称:"<<endl;
cin>>src; // c:\\a\\*abc.txt
cout<<"请输入目的路径:"<<endl;
cin>>des;
fileCopy(src, des); //调用文件拷贝函数


return 0;
}

文件复制!

今天看到文件的复制,就自己动手简单的写了一下!1.通过FileInputStream 字节流实现:@Test public void fileDemo() throws Exception { ...
  • u013890437
  • u013890437
  • 2014年04月02日 20:24
  • 392

文件复制……

问题链接……   复制文本类文件: #include"iostream" #include"string" #include"fstream" #include"stdlib.h" ...
  • zhaopeng2511
  • zhaopeng2511
  • 2011年11月21日 19:47
  • 265

使用缓冲流实现文件的复制

package com.yuxinyicheng.java; import java.io.BufferedInputStream; import java.io.BufferedOutp...
  • tyutjavalily
  • tyutjavalily
  • 2014年12月31日 09:42
  • 424

文件复制

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import...
  • sunhuwh
  • sunhuwh
  • 2014年09月06日 23:00
  • 383

vim中跨文件复制(持续更新)

最笨的一种方法 在普通模式下(即按下ESC后)输入:open文件名,后会进入该文件,在普通模式下按n+yy,之后再普通模式下再进入之前的文件同样用open文件名,再用p粘贴。 思考? 1. 复制的...
  • u013246898
  • u013246898
  • 2016年10月19日 22:27
  • 322

FileSystemWatcher判断文件复制完成

http://hi.baidu.com/uqian/item/5638ef159689a35af1090e8e   使用 FileSystemWatcher 监视指定目录中的更改。可监视指定目录中...
  • dotnet90
  • dotnet90
  • 2014年03月11日 18:23
  • 4248

java实现文件复制功能

简单的文件复制程序,当然只是复制过程中的一部分,仔细分析还有很多功能,比如判断磁盘是否有足够空间,效率等问题,这些问题后面会牵涉到 public void copyFolder(String...
  • j04110414
  • j04110414
  • 2014年01月03日 15:53
  • 2014

文件操作篇(2.文件的复制 移动 删除)

前一段时间因为笔记本坏了,所以也一直没更新文章,请见谅。重新买了个电脑,因为用的1080P的屏幕,所以VC6.0用着就再也不愉快了,以后程序我主要使用VS写,无论什么环境下面,其实现还是WINAPI的...
  • u012706792
  • u012706792
  • 2015年09月09日 00:41
  • 6707

VFP文件复制

PARAMETERS filename,pathname*-----------------------------------------------------------------------...
  • qingtongqishi
  • qingtongqishi
  • 2009年04月10日 12:17
  • 2132

Java中实现文件复制(servlet)

String filePath = request.getParameter("filePath"); filePath = request.getServletContext().getRealP...
  • menghuannvxia
  • menghuannvxia
  • 2014年09月04日 09:42
  • 939
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文件复制
举报原因:
原因补充:

(最多只允许输入30个字)