上学期的 Linux 课上,老师布置了一个编程作业,要求用 C 语言实现命令行界面下的复制命令,实现文件和文件夹的复制。本来我以为查看一下 Linux 中 cp 命令的源代码,再稍微修改修改就能轻松完成,不过 cp 命令的源代码我实在是没有耐心看下去,所以最后还是按照自己的想法来完成这个作业。我现在简单整理一下代码,方便以后自己查阅,也希望能给网友提供一个参考。
注:有些地方的实现方法可能不是最优的,主要是提供思路。
1.用到的头文件以及自定义的函数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
int Exist(char* path); //判断文件/目录是否存在
int IsFolder(char* path); //判断是否为目录
int FileCopy(char* src, char* des); //复制文件
int FileCopyToFolder(char* file, char* folder); //复制文件到目录
int CreateFolder(char *folder); //创建文件夹
int FolderCopy(char* src, char* des); //直接复制目录
int FolderCopyToFolder(char* src, char* des); //复制目录到目录
2.复制的各种可能情况
- 为单个文件、目录创建副本,即第一个参数为已存在的文件名或目录名,第二个参数为用户自定义的文件名、目录名。
- 将单个文件或目录复制到指定的目录中,即第一个参数为要复制的文件名或目录名,第二个参数为指定要复制到的目录名。
- 将多个文件或目录复制到指定的目录中,即前面所有的参数为要复制的文件名或目录名,最后一个参数为指定要复制到的目录名。
代码实现:
int main(int argc, char* argv[])
{
int i; //循环变量
//根据参数执行不同的操作
if(argc < 3) //参数不够
{
printf("Not enough input arguments!\n");
return -1;
}
else if(argc == 3) //只有两个参数
{
if(!Exist(argv[1])) //源文件/目录不存在
{
printf("'%s' does not exist!\n",argv[1]);
return -2;
}
else if(IsFolder(argv[1]) && !IsFolder(argv[2])) //直接复制源目录,制作目录副本
{
return FolderCopy(argv[1], argv[2]);
}
else if(IsFolder(argv[1]) && IsFolder(argv[2])) //将源目录复制到目标目录下
{
return FolderCopyToFolder(argv[1], argv[2]);
}
else if(!IsFolder(argv[2])) //直接复制源文件,制作文件副本