进入大学后.高中接触的C忘的差不多..大学学的语言不少..也许是自己这个人就是混惯了..连编程也是混编.除了JAVA没混编过..C/C++MS 没分过..尤其用的Dev-C++编译器..在ACM一年里简直就是混编过来的.没办法.谁让这个编译器写明是C++.却能包揽C(谁让C++兼容C呢?)..结果让我这个爱混的人就不知道混成啥样了..到现在才发现..自己对C..就知道点点语法了(严重点语法都忘了).现在开Linux 课了.Mr杨不得不让我们重拾C,才知道自己对C..对别的东东见识太短(难道真是头发太长?下次剪头发去..呵呵),这次系主任同志(Mr杨)让我们用纯C实现一个文件或目录的拷贝(全班了汗了一把.还说减轻对我们的要求,不用实现目录嵌套(那东东肯定会用到递归的),下次再搞定.)或是Shell脚本..对脚本.我们可算是基本不会的说..
今天搞完体能测试之后做了下..大致的结果是出来.但还是出现了问题..复制文件和目录是没问题..但它是在复本文件中多了个尾巴(多加了两字母).头痛...应该是出现在复制(即读写文件出现问题了).可是没想透..现把代码帖出来..待高手解答:
- //现若只有两个参数..一个源文件/目录地址,,一个目标文件/目录地址
- #include <cstdlib>
- #include <iostream>
- #include<stdio.h>
- #include<sys/stat.h> //文件属性的头文件
- #include <sys/types.h>
- #include<dir.h>
- #include<string>
- using namespace std;
- FILE *fp1,*fp2;//两个文件指针
- long i;
- char dfile[500]="";
- struct _finddata_t ff;
- void file_copy(FILE *sf,FILE *df){
- while(!feof(sf)){
- fputc(fgetc(sf),df);
- }
- fclose(sf);
- fclose(df);
- }
- //处理单个文件
- void copy_single(char *sf,char *df){
- if((fp1=fopen(sf,"r"))==NULL){
- printf("the source file can not open!!");
- exit(0);
- }
- if((fp2=fopen(df,"w"))==NULL){
- printf("the object file can not open!!");
- exit(0);
- }
- file_copy(fp1,fp2);
- }
- void copy_director(char *sf,char *df){
- _chdir(sf); //目录
- int count=0;
- if((i=_findfirst("*.*", &ff))==-1L)
- {
- printf("空白!/n");
- exit(0);
- }
- while(_findnext(i, &ff)==0)
- {
- char sfile[500]="";
- // printf("%s/n%s/n", argv[j],ff.name);
- strcat(sfile,sf);
- strcat(sfile,"//");
- strcat(sfile,ff.name);
- printf("-------%s/n", sfile);
- if(count++==0) continue;
- if(df!=NULL) strcpy(dfile,df);
- // 处理两个文件指针 ..即指向文件
- if((fp1=fopen(sfile,"r"))==NULL){
- printf("the source file can not open!!");
- exit(0);
- }
- //处理各目标文件名
- strcat(dfile,"//");
- strcat(dfile,ff.name);
- printf("===========%s/n",dfile);
- if((fp2=fopen(dfile,"w"))==NULL){
- printf("the object file can not open!!");
- exit(0);
- }
- file_copy(fp1,fp2);
- }//while
- _findclose(i);
- }
- int main(int argc, char *argv[])
- {
- struct stat buf;
- if(argc<3) exit(0);
- if(stat(argv[1],&buf)<0)
- {
- perror("出错:");
- exit(0);
- }
- if(S_ISREG(buf.st_mode)){
- //说明这是个普通文件 ..只要处理单个文件即可
- copy_single(argv[1],argv[2]);
- }
- if(S_ISDIR(buf.st_mode)){
- //说明这是个文件夹
- copy_director(argv[1],argv[2]);
- }//fi
- fclose(fp1);
- fclose(fp2);
- system("PAUSE");
- return 0;
- }