怎样用C语言将文件复制另外的文件夹
我是希望将D盘某路径中符合一定名字要求的txt(比如路径下文件有1.txt,2.txt.……100.txt,我只需要复制5.txt,10.txt等名字是5倍数的txt文件...
我是希望将D盘某路径中符合一定名字要求的txt(比如路径下文件有1.txt,2.txt.……100.txt,我只需要复制5.txt,10.txt等名字是5倍数的txt文件)文件复制到F盘相对应路径下,求具体指令,救急,多谢!
同时复制到F盘的文件还要重命名为(1.txt,2.txt……) 展开
同时复制到F盘的文件还要重命名为(1.txt,2.txt……) 展开
5个回答
展开全部
有两种方式可以实现复制:
一、自行编写函数,实现复制。
算法流程如下:
1 以读的方式打开源文件,以写的方式打开目标文件;
2 每次读一个字节,并写到目标文件中,直到达到文件结尾为止;
3 关闭两个文件。
二、调用系统命令。
stdlib.h中的system函数,可以执行系统命令行支持的命令。
int system(char *cmd);
调用时就是执行cmd中的指令。
1 对于windows,就是执行dos命令,可以调用
system("copy /Y src_file target_dir");
其中src_file为源文件,而target_dir就是目标文件夹。
2 对于Linux,需要执行shell命令cp,如下
system("cp src_file target_dir");
一、自行编写函数,实现复制。
算法流程如下:
1 以读的方式打开源文件,以写的方式打开目标文件;
2 每次读一个字节,并写到目标文件中,直到达到文件结尾为止;
3 关闭两个文件。
二、调用系统命令。
stdlib.h中的system函数,可以执行系统命令行支持的命令。
int system(char *cmd);
调用时就是执行cmd中的指令。
1 对于windows,就是执行dos命令,可以调用
system("copy /Y src_file target_dir");
其中src_file为源文件,而target_dir就是目标文件夹。
2 对于Linux,需要执行shell命令cp,如下
system("cp src_file target_dir");
展开全部
//纯API,WIN32_FIND_DATAA可以得到文件时间、大小字节信息,稍加修改可以对时间上,文//件大小上对文件进行约束分类,这个程序是遍历文件的一个变种,测试通过完全符合你的要求
//对了。这个程序跳过前面字节,遍历D:\\123下的所有文件,排除除txt格式外的任何文件,就像
aaasdsad5.txt也将被复制,因为最后字节为5
#define _WIN32_WINNT 0x500//使CreateHardLink可用
#include <Windows.h>
#include "iostream.h"
#include "stdarg.h"
#include "stdio.h"
WIN32_FIND_DATAA lpffd;
HANDLE file;
UINT count=1;
char* Fpath="F:\\abc";//在这里改输出路径,从D:\123的5的倍数文件复制到F:\abc里的1、2、3
char* Dpath="D:\\123";//在这里改输入路径
char dpath[50];
char fpath[50];
char newfilename[10];
bool NeedCopy(char* filename)
{
for(int i=0;filename[i]!='\0';i++)
{
if(filename[i]=='.')
{
if((filename[i+1]!='\0')&&(filename[i+2]!='\0')&&(filename[i+3]!='\0'))
{
if((filename[i+1]!='t')||(filename[i+2]!='x')||(filename[i+3]!='t'))
return 0;
}
if((filename[i-1]=='0')||(filename[i-1]=='5'))
{
dpath[0]='\0';
fpath[0]='\0';
sprintf(dpath,"%s\\%s",Dpath,filename);
sprintf(newfilename,"%d.txt",count++);
sprintf(fpath,"%s\\%s",Fpath,newfilename);
cout<<"copy "<<dpath<<" to "<<fpath<<endl;
CopyFile(dpath,fpath,false);
return 1;
}
}
}
return 0;
}
void link(char* a1,char* a2,char* result)
{
int j=0;
for(int i=0;a1[i]!='\0';i++)
{
result[j++]=a1[i];
}
for(i=0;a2[i]!='\0';i++)
{
result[j++]=a2[i];
}
result[j]='\0';
}
void main()
{
char path[100];
link(Fpath,"\\*.*",path);
HANDLE hfile=(HANDLE)FindFirstFile(path,&lpffd);
link(Dpath,"\\*.*",path);
file=(HANDLE)FindFirstFile(path,&lpffd);
if(((file)!=INVALID_HANDLE_VALUE)&&((hfile)!=INVALID_HANDLE_VALUE))
{
// SetCurrentDirectory(Dpath);
while(1)
{
if(FindNextFile(file,&lpffd))
NeedCopy(lpffd.cFileName);
else
{
FindClose(file);
break;
}
}
}
else
{
cout<<"请确认以下路径是否存在:"<<endl;
cout<<Fpath<<endl;
cout<<Dpath<<endl;
}
system("pause");
}
//对了。这个程序跳过前面字节,遍历D:\\123下的所有文件,排除除txt格式外的任何文件,就像
aaasdsad5.txt也将被复制,因为最后字节为5
#define _WIN32_WINNT 0x500//使CreateHardLink可用
#include <Windows.h>
#include "iostream.h"
#include "stdarg.h"
#include "stdio.h"
WIN32_FIND_DATAA lpffd;
HANDLE file;
UINT count=1;
char* Fpath="F:\\abc";//在这里改输出路径,从D:\123的5的倍数文件复制到F:\abc里的1、2、3
char* Dpath="D:\\123";//在这里改输入路径
char dpath[50];
char fpath[50];
char newfilename[10];
bool NeedCopy(char* filename)
{
for(int i=0;filename[i]!='\0';i++)
{
if(filename[i]=='.')
{
if((filename[i+1]!='\0')&&(filename[i+2]!='\0')&&(filename[i+3]!='\0'))
{
if((filename[i+1]!='t')||(filename[i+2]!='x')||(filename[i+3]!='t'))
return 0;
}
if((filename[i-1]=='0')||(filename[i-1]=='5'))
{
dpath[0]='\0';
fpath[0]='\0';
sprintf(dpath,"%s\\%s",Dpath,filename);
sprintf(newfilename,"%d.txt",count++);
sprintf(fpath,"%s\\%s",Fpath,newfilename);
cout<<"copy "<<dpath<<" to "<<fpath<<endl;
CopyFile(dpath,fpath,false);
return 1;
}
}
}
return 0;
}
void link(char* a1,char* a2,char* result)
{
int j=0;
for(int i=0;a1[i]!='\0';i++)
{
result[j++]=a1[i];
}
for(i=0;a2[i]!='\0';i++)
{
result[j++]=a2[i];
}
result[j]='\0';
}
void main()
{
char path[100];
link(Fpath,"\\*.*",path);
HANDLE hfile=(HANDLE)FindFirstFile(path,&lpffd);
link(Dpath,"\\*.*",path);
file=(HANDLE)FindFirstFile(path,&lpffd);
if(((file)!=INVALID_HANDLE_VALUE)&&((hfile)!=INVALID_HANDLE_VALUE))
{
// SetCurrentDirectory(Dpath);
while(1)
{
if(FindNextFile(file,&lpffd))
NeedCopy(lpffd.cFileName);
else
{
FindClose(file);
break;
}
}
}
else
{
cout<<"请确认以下路径是否存在:"<<endl;
cout<<Fpath<<endl;
cout<<Dpath<<endl;
}
system("pause");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只帮你解决路径问题 ,剩下的自己做功课查资料去
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
int len1;
int len2;
int i;
char filedir[1024] = "D:\\xyz\\abc\\";
char filename[32];
char fileextend[8] = ".txt";
len1 = strlen(filedir);
for(i=5;i<=100;i+=5)
{
sprintf(filename, "%d", i);
len2 = strlen(filename);
strcpy(filedir+len1,filename);
strcpy(filedir+len1+len2,fileextend);
printf("%s\n",filedir);
//CopyFile()//自己查查CopyFile()这个API怎么用吧
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
int len1;
int len2;
int i;
char filedir[1024] = "D:\\xyz\\abc\\";
char filename[32];
char fileextend[8] = ".txt";
len1 = strlen(filedir);
for(i=5;i<=100;i+=5)
{
sprintf(filename, "%d", i);
len2 = strlen(filename);
strcpy(filedir+len1,filename);
strcpy(filedir+len1+len2,fileextend);
printf("%s\n",filedir);
//CopyFile()//自己查查CopyFile()这个API怎么用吧
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
复制的话可以调用syste函数
直接使用dos指令来操作
直接使用dos指令来操作
更多追问追答
追问
能不能将具体指令写下来
追答
#include
#include
#include
#include
int main(void)
{
char filename[10];
char cmd[30];
int i;
for(i=1; i<=100; i++)
{
if (i % 5 == 0)
{
sprintf(filename, "%d.txt", i);
if (!access(filename, 0))
{
sprintf(cmd, "copy %s F:\\", filename);
system(cmd);
}
}
}
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题一般有两种方法,第一种是采用两个文件指针,然后不断地读原始文件,并不断地写入到新文件中去。
另一种则是采用Windows函数CopyFile。
另一种则是采用Windows函数CopyFile。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询