Linux C编程-实现文件夹的递归拷贝


copy(读取的路径或名字,目标文件的路径或名字)

{

       if(读取的是一个文件夹)

       {     创造一个文件夹

             打开文件夹,读取文件夹的内容

             判断是否是一个文件夹  是:递归copy(xx,xx); 

             否,说明是个文件,拷贝文件       

       }

}

  1. int copy_r(char *read_dir_path, char *write_dir_path)  
  2. {  
  3.     DIR * p_dir;  
  4.     struct dirent * p_dirent;  
  5.   
  6.       
  7.     char read_buf[256];  
  8.     char write_buf[256];  
  9.   
  10.     sprintf(read_buf,"%s/", read_dir_path);  
  11.     sprintf(write_buf,"%s/",write_dir_path);  
  12.   
  13.     strcat(read_dir_path,"/");  
  14.     if( Is_dir(read_buf) )  
  15.     {  
  16.         //mkdir   
  17.         if(mkdir(write_buf, 0755) < 0)  
  18.         {  
  19.             printf("mkdir fall:%s\n", strerror(errno));  
  20.             return -1;  
  21.         }  
  22.   
  23.   
  24.         //opendir and readdir   
  25.   
  26.         if((p_dir = opendir(read_buf)) == NULL )  
  27.         {  
  28.             printf("Usage:cp -r <src_dir> <dat_dir> error:%s\n",strerror(errno));  
  29.             return -1;  
  30.         }  
  31.   
  32.         while((p_dirent=readdir(p_dir)) != NULL)  
  33.         {  
  34.             char read_buffer[256];  
  35.             char write_buffer[256];  
  36.             sprintf(read_buffer,"%s%s", read_buf, p_dirent->d_name);  
  37.             sprintf(write_buffer,"%s%s", write_buf, p_dirent->d_name);  
  38.   
  39.             printf("%s\n%s\n",read_buffer,write_buffer);  
  40.   
  41.             //it is a directory   
  42.             if( Is_dir(read_buffer) && 0 != strcmp(p_dirent->d_name, ".") && 0 != strcmp(p_dirent->d_name, "..") )  
  43.             {  
  44.                   
  45.                 copy_r(read_buffer, write_buffer);  
  46.             }  
  47.   
  48.             else if(0 != strcmp(p_dirent->d_name, ".") && 0 != strcmp(p_dirent->d_name, ".."))  
  49.             {  
  50.                 //copy file   
  51.                 if( file_copy_line(read_buffer, write_buffer) < 0 )  
  52.                     return 0;  
  53.             }  
  54.   
  55.   
  56.         }  
  57.   
  58.         closedir(p_dir);  
  59.   
  60.     }  
  61.   
  62. }  

相关内容