工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1449|回复: 12

求用C写一个拷贝命令,版主看你的了!

[复制链接]
发表于 2005-12-26 11:47 | 显示全部楼层 |阅读模式
 版主老大啊,麻烦您用C写一个文件拷贝程序给小弟看一下啊!我是学C的,C++我看不懂啊1谢谢了!
发表于 2005-12-26 14:06 | 显示全部楼层
简单写了一个.大家别见笑.有什么好的方法也可以讨论一下.呵呵
对于文件存在与否没有作判断,目的是为了程序简洁.
在VC.NET里编译通过.但使用的是C函数.
/*copy.cpp file */
#include <stdio.h>
#define BUFFER 4096

int main(int argc, _TCHAR* argv[])
        FILE *in,*out;
        if( (in=fopen(argv[1],"rb"))==NULL ){
                printf("in error");
                exit(1);
        }
        if( (out=fopen(argv[2],"wb"))==NULL ){
                printf("out error");
                if( in!=NULL ){
                        fclose(in);
                }
                exit(1);
        }

        unsigned char buffer[BUFFER];
        long size;
        do{
                size = fread(buffer,1,BUFFER,in);
                fwrite(buffer,1,size,out);
        }while( size==BUFFER );
        printf("copy finish");
        fclose(in);
        fclose(out);
        return 0;
}

[ Last edited by hjack on 2005-12-26 at 14:11 ]
回复

使用道具 举报

发表于 2005-12-26 14:09 | 显示全部楼层
在命令行进入copy.exe所在目录,
输入
copy.exe sourcefile targetfile

就可以了.
复制完成后会输出copy finish

注意,命令是copy.exe,不能是copy,
因为copy是系统的复制命令.
回复

使用道具 举报

发表于 2005-12-26 16:18 | 显示全部楼层
版主老大,你写的是VC.NET下编译通过.可能楼主不太中意哦!

我稍作改改,你不会介意的!
在TC下编译通过


  1. /*cp.c file */
  2. #include <stdio.h>
  3. int main(int argc,char* argv[])
  4. {   
  5.     FILE *src,*dest;
  6.     char ch;
  7.         if(argc!=3){printf("usage:cp sour dest");return 1;}
  8.         if ((src=fopen(argv[1],"rb"))==NULL)
  9.         {
  10.        printf("error");
  11.        return 1;
  12.     }
  13.     if ((dest=fopen(argv[2],"wb"))==NULL)
  14.         {
  15.        printf("error");
  16.        return 1;
  17.     }
  18.         while((ch=getc(src))!=-1)putc(ch,dest);
  19.         printf("ok");
  20.         return 0;

  21. }

复制代码
回复

使用道具 举报

发表于 2005-12-26 17:57 | 显示全部楼层
呵呵.

不知楼上的程序对于二进制文件的复制行不行??

我那个我试过复试300M的rmvb文件.还有图片,mp3等.没有出错..
回复

使用道具 举报

发表于 2005-12-26 18:30 | 显示全部楼层
哦,不行
回复

使用道具 举报

 楼主| 发表于 2005-12-26 21:12 | 显示全部楼层
哇塞!高手就是高手啊,有效率啊!可是版主啊,还有powerwind啊,我想做一个带格式的命令啊,其格式为:filecopy filename1 filename2   (用TC实现)
我是一个菜鸟,我还有一个问题说是,像filename这样的命令,要想它有一个固定要格式,怎么做呢,请各位可以详细说明一下吗,最后是各位的亲身体会!再一次谢谢!
回复

使用道具 举报

 楼主| 发表于 2005-12-26 21:53 | 显示全部楼层
版主啊,不好意思啊,我很菜的,小弟用的是TC,我把您的代码复制进去运行时出错,我是怎么调试也不行,能不能像powerwind大哥一样,用TC写一个啊,呵呵,谢谢了!
回复

使用道具 举报

发表于 2005-12-26 22:20 | 显示全部楼层
盗版版主的给你

#include <stdio.h>
#define BUFFER 4096

int main(int argc,char* argv[])
{   
    FILE *src,*dest;
    unsigned char buffer[BUFFER];
        long size;
        if(argc!=3){printf("usage:cp sour dest");return 1;}
        if ((src=fopen(argv[1],"rb"))==NULL)
        {
       printf("error");
       return 1;
    }
    if ((dest=fopen(argv[2],"wb"))==NULL)
        {
       printf("error");
       return 1;
    }
        
        do{
                size = fread(buffer,1,BUFFER,src);
                fwrite(buffer,1,size,dest);
        }while( size==BUFFER );
        printf("copy finish");
        fclose(src);
        fclose(dest);
        printf("ok");
        return 0;

}

[ Last edited by powerwind on 2005-12-26 at 23:24 ]
回复

使用道具 举报

发表于 2005-12-26 22:20 | 显示全部楼层
把你的错误说说.

最好把你的调试过程也说说.

我想了解一下你是怎样调试的.
回复

使用道具 举报

发表于 2005-12-26 22:58 | 显示全部楼层
我知道 你是什么错了.

因为在c里,变量的定义要放在函数的头部,

哎...
回复

使用道具 举报

 楼主| 发表于 2005-12-27 11:57 | 显示全部楼层
呵呵,谢谢两位啊,经过昨天一天的努力,已经有很多的收获了,程序也看得懂了(呵呵,准确地说是似懂非懂的那种),可还是有两个白痴问题想问:
1 BUFFER的值为什么是4096,它是怎么确定的,可以是其它值吗?
2 return时的值1和0有什么不同吗?都是1或者都是0可以吗?如果不可以,会有什么不同的效果啊?
    小弟真的不懂,但我是真的想把它弄清楚!请各位高手发言,鼓掌..............
回复

使用道具 举报

发表于 2005-12-27 12:29 | 显示全部楼层
BUFFER值是数组长度,也就是缓冲区大小.可大可小.
return 0在main函数中是正常退出,其它值就不是正常退出了。
这样做是为了告诉系统,这个程序是不是正常退出的。

你在命令提示符下输入
echo  %ErrorLevel%应该可以看到一个0
有兴趣可到百度找找,看看相关知识。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-30 06:54

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表