#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
void main(int argc, char * argv[] )
{
FILE * source = fopen(argv[1],"r");
if(source==NULL)
{
perror ("file no exsit!\n");
return ;
}
else
{
struct stat * statbuf=(struct stat *)malloc(sizeof(statbuf));
stat(argv[2], statbuf); //判斷目标路徑是一個普通檔案還是一個目錄
if(S_ISDIR (statbuf->st_mode)) //目标是個目錄
{
int i,j,k=0;
//因為目标路徑是一個檔案夾,是以預設拷貝一個和源檔案名字一樣的名字
//要找到源檔案的名字,就要找源路徑最後一個'/'後面的字元串就是源檔案名!!
for(i=strlen(argv[1])-1;i>=0;i--)
{
if(argv[1][i]=='/') //找到了最後一個'/'的下标
{
break; //找到就退出 ,保留'/'下标為i
}
}
char source_file_name[128]={};//用來存儲源檔案的名字
for(j=i+1;j<strlen(argv[1]);j++)
{ //把源路徑最後一個'/'後面的字元串給source_file_name,它就是源檔案名字
source_file_name[k++]=argv[1][j];
}
//如果目标路徑最後面沒有‘/’,則需要加一個'/'
if(argv[2][strlen(argv[2])-1]!='/')
{
strcat (argv[2],"/");
}
//把目标路徑和源檔案名拼接起來,成為一個目标檔案名,并建立打開它
FILE * target = fopen(strcat (argv[2],source_file_name),"w+");
while(!feof(source))
{ //把源檔案内容全部傳給目标檔案
char buf[10]={};
fread (buf,1,10,source);
fwrite (buf,1,10, target);
}
fclose (target);
}
else//目标路徑是個檔案
{
FILE * target = fopen(argv[2],"w+");
while(!feof(source))
{//把源檔案内容全部傳給目标檔案
char buf[10]={};
fread (buf,1,10,source);
fwrite (buf,1,10, target);
}
fclose (target);
}
fclose (source);
}
}