如何在linux下用c编程实现文件的复制

如何在linux下用c编程实现文件的复制,第1张

#include<stdio.h>#include<unistd.h>#include<sys/stat.h>#include<sys/types.h>#include<fcntl.h>

int main(int argc,char **argv) { if(argc<3)//参数少于3,给出提示并退出 {

printf("请按如下格式运行!\n") printf("./a.out [原始图片] [目标图片]\n")

return 0

}

int fd1 = open(argv[1],O_RDONLY)//只读方式打开源文件 if(-1 == fd1) { perror("打开文件失败")

return 0

} int fd2 = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0666)//读写方式打开文件,有则清空,没有则创建 char buf[100]={0} int res

while(res = read(fd1,buf,sizeof(buf)))//从源文件读出 {

write(fd2,buf,res)//写入到目标文件

}

close(fd1)//关闭文件 close(fd2) return 0

}

拷贝A文件夹到B目录

cp -rv A B

如果你正在B目录下,可以这样:

cp -rv A ./

拷贝A文件下的A1文件

cp -v A/A1 ./

或者

cp -v A/A1 B/

扩展资料:

文件复制命令cp

命令格式:

cp [-adfilprsu] 源文件(source) 目标文件(destination)

cp [option] source1 source2 source3 ...  directory

参数说明:

-a:是指archive的意思,也说是指复制所有的目录

-d:若源文件为连接文件(link file),则复制连接文件属性而非文件本身

-f:强制(force),若有重复或其它疑问时,不会询问用户,而强制复制

-i:若目标文件(destination)已存在,在覆盖时会先询问是否真的 *** 作

-l:建立硬连接(hard link)的连接文件,而非复制文件本身

-p:与文件的属性一起复制,而非使用默认属性

-r:递归复制,用于目录的复制 *** 作

-s:复制成符号连接文件(symbolic link),即“快捷方式”文件

-u:若目标文件比源文件旧,更新目标文件

如将/test1目录下的file1复制到/test3目录,并将文件名改为file2,可输入以下命令:

cp /test1/file1 /test3/file2

#include <stdlib.h>

#include <string.h>

#include <io.h>

#include <stdio.h>

#include <iostream>

#include <windows.h>

/*********************************************************************

功能:复制文件

参数:pSrc,原文件名

pDes,目标文件名

返回:<0,失败

>0,成功

作者:

*********************************************************************/

#define BUF_SIZE256

int copyFile(const char * pSrc,const char *pDes)

{

FILE *in_file, *out_file

char data[BUF_SIZE]

size_t bytes_in, bytes_out

long len = 0

if ( (in_file = fopen(pSrc, "rb")) == NULL )

{

perror(pSrc)

return -2

}

if ( (out_file = fopen(pDes, "wb")) == NULL )

{

perror(pDes)

return -3

}

while ( (bytes_in = fread(data, 1, BUF_SIZE, in_file)) >0 )

{

bytes_out = fwrite(data, 1, bytes_in, out_file)

if ( bytes_in != bytes_out )

{

perror("Fatal write error.\n")

return -4

}

len += bytes_out

printf("copying file .... %d bytes copy\n", len)

}

fclose(in_file)

fclose(out_file)

return 1

}

/*********************************************************************

功能:复制(非空)目录

参数:pSrc,原目录名

pDes,目标目录名

返回:<0,失败

>0,成功

作者:

*********************************************************************/

int copyDir(const char * pSrc,const char *pDes)

{

if (NULL == pSrc || NULL == pDes) return -1

mkdir(pDes)

char dir[MAX_PATH] = {0}

char srcFileName[MAX_PATH] = {0}

char desFileName[MAX_PATH] = {0}

char *str = "\\*.*"

strcpy(dir,pSrc)

strcat(dir,str)

//首先查找dir中符合要求的文件

long hFile

_finddata_t fileinfo

if ((hFile = _findfirst(dir,&fileinfo)) != -1)

{

do

{

strcpy(srcFileName,pSrc)

strcat(srcFileName,"\\")

strcat(srcFileName,fileinfo.name)

strcpy(desFileName,pDes)

strcat(desFileName,"\\")

strcat(desFileName,fileinfo.name)

//检查是不是目录

//如果不是目录,则进行处理文件夹下面的文件

if (!(fileinfo.attrib &_A_SUBDIR))

{

copyFile(srcFileName,desFileName)

}

else//处理目录,递归调用

{

if ( strcmp(fileinfo.name, "." ) != 0 &&strcmp(fileinfo.name, ".." ) != 0 )

{

copyDir(srcFileName,desFileName)

}

}

} while (_findnext(hFile,&fileinfo) == 0)

_findclose(hFile)

return 1

}

return -3

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11584753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存