怎样用C语言将文件复制另外的文件夹

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用C语言将文件复制另外的文件夹相关的知识,希望对你有一定的参考价值。

我是希望将D盘某路径中符合一定名字要求的txt(比如路径下文件有1.txt,2.txt.……100.txt,我只需要复制5.txt,10.txt等名字是5倍数的txt文件)文件复制到F盘相对应路径下,求具体指令,救急,多谢!
同时复制到F盘的文件还要重命名为(1.txt,2.txt……)

有两种方式可以实现复制:
一、自行编写函数,实现复制。
算法流程如下:
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");
参考技术A //纯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");
参考技术B 只帮你解决路径问题 ,剩下的自己做功课查资料去
#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;
参考技术C 复制的话可以调用syste函数
直接使用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;

追问

同时复制到F盘的文件还要重命名为(1.txt,2.txt……)

追答

#include
#include
#include
#include

int main(void)

char filename[10];
char desfilename[10];
char cmd[30];
int i, j = 1;
for(i=1; i<=100; i++)

if (i % 5 == 0)

sprintf(filename, "%d.txt", i);
if (!access(filename, 0))

sprintf(desfilename, "%d.txt", j++);
sprintf(cmd, "copy %s F:\\%s", filename, desfilename);
system(cmd);




return 0;

本回答被提问者采纳
参考技术D 这个问题一般有两种方法,第一种是采用两个文件指针,然后不断地读原始文件,并不断地写入到新文件中去。
另一种则是采用Windows函数CopyFile。

C语言文件复制

#include "stdio.h"
void main()

FILE *fp1,*fp2;
fp1=fopen("file1.txt","r");
fp2=fopen("file2.txt","w");
while(!feof(fp1))
putchar(getc(fp1));
rewind(fp1);
while(!feof(fp1))
putc(fgetc(fp1),fp2);
fclose(fp1);
fclose(fp2);
看看那里错了??
原函数运行是个无限循环,是哪个语句出错了,我新手,许多地方不明白,望详细指点...

不应对非文本文件使用fgetc等易受干扰的函数,建议用fread,fwrite读写二进制文件

#include "stdio.h"

/* 保护硬盘,绝对不要一个字节一个字节复制 */
#define SIZEOFBUFFER 256*1024L /* 缓冲区大小,默认为256KB */

long filesize(FILE *stream)

long curpos, length;
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;


int copyfile(const char* src,const char* dest)

FILE *fp1,*fp2;
int fsize,factread;
static unsigned char buffer[SIZEOFBUFFER];

fp1=fopen(src,"rb");
fp2=fopen(dest,"wb+");
if (!fp1 || !fp2) return 0;
for (fsize=filesize(fp1);fsize>0;fsize-=SIZEOFBUFFER)

factread=fread(buffer,1,SIZEOFBUFFER,fp1);
fwrite(buffer,factread,1,fp2);

fclose(fp1);
fclose(fp2);
return 1;


int main()

copyfile("file1.txt","file2.txt");
return 0;
参考技术A C语言复制文件主要由三种办法,你可以根据自己的知识选用一个

方法1)利用C语言的二进制读写函数
自己用fopen打开源文件和目标文件,然后用循环读写实现复制

方法2)利用操作系统的文件复制函数
例如Windows就有如下API函数可以复制文件
BOOL CopyFile(
LPCTSTR lpExistingFileName, // name of an existing file
LPCTSTR lpNewFileName, // name of new file
BOOL bFailIfExists // operation if file exists
);
第一个参数是用来存放当前要处理文件的路径。
第二个参数是用来存放用户指定的新路径。
第三个参数它是用来判断用户指定的新路径是否已经存在要存放的路径,如果为TRUE,则新路径中已经存在该文件了,该函数调用失败,否则就调用成功。

方法3:C语言调用操作系统的copy命令
首先#include<stdlib.h>

然后 程序中 调用 system(“这里写 copy的完整命令”);

以上是关于怎样用C语言将文件复制另外的文件夹的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程实现:将一个文件的内容复制到另一个文件。(详细点的,考试用。)谢谢!

C语言文件复制

C语言 结构复制

C语言 结构复制

怎样禁止复制电脑文件

C语言函数编写:文件复制