鱼C论坛

 找回密码
 立即注册
查看: 3185|回复: 7

c++文件复制

[复制链接]
发表于 2013-3-24 11:20:51 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 ycg 于 2013-3-24 11:22 编辑

初学c++,下面这段代码编译没错,但一运行程序就停止工作
  1. #include<iostream>
  2. #include<fstream>using namespace std;
  3. int main(int argc,char* argv[])
  4. {

  5. cin>>argv[0]>>argv[1]>>argv[2];
  6. ifstream in(argv[1]);

  7. ofstream out(argv[2],ios::out); if(!in)
  8.   cout<<"read error!"<<endl;
  9. if(!out)
  10.   cout<<"read error!"<<endl; if (argc!=3)
  11. {
  12.   cout<<"请按正确形式重新输入:\n"<<endl;
  13. } char ch;
  14. while(in>>ch)
  15. {
  16.   out<<ch;
  17. }
  18. in.close();
  19. out.close();
  20. return 0;
  21. }
复制代码

最佳答案

查看完整内容

我认为主要的问题是你不明白命令行参数。所以代码本身没错,但你无法以正确的方式运行它。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-24 11:20:52 | 显示全部楼层

我认为主要的问题是你不明白命令行参数。所以代码本身没错,但你无法以正确的方式运行它。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-24 12:11:40 | 显示全部楼层
#include <fstream>
#include <iostream>

using namespace std;

int main( int argc,char * argv[] )
{
        if( argc != 3 ) {
                fprintf( stderr,"正确格式:filecopy.exe 源文件名 目标文件名\n");
                exit(1);
        }
       
        fstream in( argv[1], ios::in | ios::binary );
        if( !in ) {
                cerr << "文件" << argv[1] << "读取失败!" <<  endl;
                exit(1);
        }

        fstream out( argv[2],ios::out | ios::binary );
        if( !out ) {
                cerr << "文件" << argv[2] << "创建失败!"  << endl;
                exit(1);
        }
       
        char ch;
        ch = in.get();
        while( !in.eof() ) {
                out << ch;
                ch = in.get();
        }       

        cout << "成功复制一个文件" << endl;
        in.close();
        out.close();

        return 0;
}

你可以借鉴一下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-24 19:10:04 | 显示全部楼层
argv是参数 应该不能再输入吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-24 19:47:00 | 显示全部楼层
  1. /*
  2. 1.建立文件C:\data.txt,里面随便写点什么
  3. 2.运行程序
  4. 3.得到文件C:\output.txt,内容和C:\data.txt一样(所有空白字符都将消失)
  5. */
  6. #include<iostream>
  7. #include<fstream>
  8. using namespace std;

  9. int main(int argc,char* argv[])  {       
  10.         //cin>>argv[0]>>argv[1]>>argv[2];
  11.         //ifstream in(argv[1]);
  12.         ifstream in("C:\\data.txt");
  13.         //ofstream out(argv[2],ios::out);
  14.         ofstream out("C:\\output.txt",ios::out);
  15.         if(!in)
  16.                 cout<<"read error!"<<endl;
  17.         if(!out)
  18.                 cout<<"read error!"<<endl;
  19.         //if (argc!=3) {
  20.         //        cout<<"请按正确形式重新输入:\n"<<endl;
  21.         //}
  22.         char ch;
  23.         while(in>>ch) {       
  24.                 out<<ch;
  25.         }
  26.         in.close();
  27.         out.close();
  28.         return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-24 20:51:08 | 显示全部楼层

谢谢!
但是我是想模仿下面这段c代码写的
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main( int argc, char* argv[] )
  4. {
  5.       FILE *in, *out;
  6.       int ch;  // char

  7.       if( argc != 3 )
  8.       {
  9.             fprintf( stderr, "输入形式: copyFile 源文件名 目标文件名 \n" );
  10.             exit( EXIT_FAILURE );
  11.       }

  12.       if( ( in = fopen( argv[1], "rb") ) == NULL )
  13.       {
  14.             fprintf( stderr, "打不开文件: %s \n", argv[1] );
  15.             exit( EXIT_FAILURE );
  16.       }

  17.       if( ( out = fopen( argv[2], "wb") ) == NULL )
  18.       {
  19.             fprintf( stderr, "打不开文件: %s \n", argv[2] );
  20.             fclose( in );                                   /
  21.             exit( EXIT_FAILURE );
  22.       }

  23.       while( (ch = getc(in)) != EOF ) // EOF == end of file
  24.       {
  25.             if( putc( ch, out ) == EOF )
  26.             {
  27.                   break;
  28.             }
  29.       }

  30.       if( ferror( in ) )
  31.       {
  32.             printf("读取文件 %s 失败! \n", argv[1] );
  33.       }

  34.       if( ferror( out ))
  35.       {
  36.             printf("写入文件 %s 失败! \n", argv[2] );
  37.       }

  38.       printf("成功复制1个文件!\n");

  39.       fclose( in );
  40.       fclose( out );

  41.       return 0;
  42. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-24 23:50:56 | 显示全部楼层
仰望天上的光 发表于 2013-3-24 22:44
我认为主要的问题是你不明白命令行参数。所以代码本身没错,但你无法以正确的方式运行它。

总算弄明白了,也谢谢ls几位哥们
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-24 12:52:00 | 显示全部楼层
ycg 发表于 2013-3-24 23:50
总算弄明白了,也谢谢ls几位哥们

能问一下正确的运行方式是怎样的吗?????????
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 16:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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