Linux C语言实现文件夹拷贝

发布时间:2020-01-09
技术:Linux、C语言

概述

Demo在Linux系统中,用C语言实现文件夹拷贝,实现过程涉及到的知识点有:文件操作、目录操作和切换路径等。

详细

一、相关函数说明:

  • opendir()

头文件:

  #include<sys/types.h>

#include<dirent.h>

功能

打开一个目录,在失败的时候返回一个空的指针

函数原型:

DIR* opendir(const char * path);

参数:

path --- 打开目录路径

返回值:

成功 --- DIR结构体指针

失败 --- NULL


  • readdir()

头文件:

  #include<dirent.h>

功能:

  读取一个目录项中的信息

函数原型:

  struct dirent* readdir(DIR* dp);

参数:

  dp --- 读取的目录项

返回值:

  成功 --- 目录项中的所有信息,存储在dirent结构体中

  失败 --- NULL

说明:

struct dirent
{
    long d_ino;  //索引节点号
    off_t d_off;  //在目录文件中的偏移
  unsigned short d_reclen;  //文件名长
  unsigned char d_type; //文件类型 
  char d_name [NAME_MAX+1]; //文件名,最长255字符
}

文件类型有:
    DT_BLK      块设备文件      This is a block device.              
    DT_CHR      字符设备文件    This is a character device.         
    DT_DIR      目录文件        This is a directory.                  
    DT_FIFO     管道文件        This is a named pipe (FIFO).     
    DT_LNK      链接文件        This is a symbolic link.         
    DT_REG      普通文件        This is a regular file.  
    DT_SOCK     网络通信文件    This is a UNIX domain socket.  
    DT_UNKNOWN  未知文件        The file type could not be determined.

 

  • closedir()

头文件:

#include<sys/types.h>

#include<dirent.h>

功能

关闭一个目录项

函数原型:

int closedir(DIR *dir);

参数:

dir --- 目录项

返回值:

成功 --- 0

失败 --- -1


二、部分代码

/*
 * 函数名:copy
 * 功  能:文件拷贝
 * 参  数:
 *     srcFilePath --- 源文件路径
 *     dstFilePath --- 目标文件路径
 * 返回值:无
**/
void copy(char *srcFilePath, char *dstFilePath)
{
    int len;
    FILE *src,*dst;
    char buf[1024] = {0};
 
    //打开文件
    src = fopen(srcFilePath,"r+");
    if(!src){
        perror("fopen srcFilePath error!");
    }
    dst = fopen(dstFilePath,"w+");
    if(!dst){
        perror("fopen dstFilePath error!");
    }
 
    //循环拷贝
    while((len = fread(buf,1,1024,src))>0){
        fwrite(buf,1,len,dst);
    }
 
    //关闭文件
    fclose(src);
    fclose(dst);
}

  运行命令:./main source dst


三、实现效果

1578467111524094355.png


四、总结

  后续跟新以下Demo:

1578467196512053594.jpg


五、项目结构图

1578467239448010359.jpg

本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
手机上随时阅读、收藏该文章 ?请扫下方二维码