ycg 发表于 2013-3-24 11:20:51

c++文件复制

本帖最后由 ycg 于 2013-3-24 11:22 编辑

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

cin>>argv>>argv>>argv;
ifstream in(argv);

ofstream out(argv,ios::out); if(!in)
cout<<"read error!"<<endl;
if(!out)
cout<<"read error!"<<endl; if (argc!=3)
{
cout<<"请按正确形式重新输入:\n"<<endl;
} char ch;
while(in>>ch)
{
out<<ch;
}
in.close();
out.close();
return 0;
}

仰望天上的光 发表于 2013-3-24 11:20:52

ycg 发表于 2013-3-24 20:51 static/image/common/back.gif
谢谢!
但是我是想模仿下面这段c代码写的

我认为主要的问题是你不明白命令行参数。所以代码本身没错,但你无法以正确的方式运行它。

志鹏最帅 发表于 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, ios::in | ios::binary );
        if( !in ) {
                cerr << "文件" << argv << "读取失败!" <<endl;
                exit(1);
        }

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

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

        return 0;
}

你可以借鉴一下

wangyexin 发表于 2013-3-24 19:10:04

argv是参数 应该不能再输入吧

仰望天上的光 发表于 2013-3-24 19:47:00

/*
1.建立文件C:\data.txt,里面随便写点什么
2.运行程序
3.得到文件C:\output.txt,内容和C:\data.txt一样(所有空白字符都将消失)
*/
#include<iostream>
#include<fstream>
using namespace std;

int main(int argc,char* argv[]){       
        //cin>>argv>>argv>>argv;
        //ifstream in(argv);
        ifstream in("C:\\data.txt");
        //ofstream out(argv,ios::out);
        ofstream out("C:\\output.txt",ios::out);
        if(!in)
                cout<<"read error!"<<endl;
        if(!out)
                cout<<"read error!"<<endl;
        //if (argc!=3) {
        //        cout<<"请按正确形式重新输入:\n"<<endl;
        //}
        char ch;
        while(in>>ch) {       
                out<<ch;
        }
        in.close();
        out.close();
        return 0;
}

ycg 发表于 2013-3-24 20:51:08

仰望天上的光 发表于 2013-3-24 19:47 static/image/common/back.gif


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

int main( int argc, char* argv[] )
{
      FILE *in, *out;
      int ch;// char

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

      if( ( in = fopen( argv, "rb") ) == NULL )
      {
            fprintf( stderr, "打不开文件: %s \n", argv );
            exit( EXIT_FAILURE );
      }

      if( ( out = fopen( argv, "wb") ) == NULL )
      {
            fprintf( stderr, "打不开文件: %s \n", argv );
            fclose( in );                                 /
            exit( EXIT_FAILURE );
      }

      while( (ch = getc(in)) != EOF ) // EOF == end of file
      {
            if( putc( ch, out ) == EOF )
            {
                  break;
            }
      }

      if( ferror( in ) )
      {
            printf("读取文件 %s 失败! \n", argv );
      }

      if( ferror( out ))
      {
            printf("写入文件 %s 失败! \n", argv );
      }

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

      fclose( in );
      fclose( out );

      return 0;
}

ycg 发表于 2013-3-24 23:50:56

仰望天上的光 发表于 2013-3-24 22:44 static/image/common/back.gif
我认为主要的问题是你不明白命令行参数。所以代码本身没错,但你无法以正确的方式运行它。

总算弄明白了,也谢谢ls几位哥们

我再想想 发表于 2019-11-24 12:52:00

ycg 发表于 2013-3-24 23:50
总算弄明白了,也谢谢ls几位哥们

能问一下正确的运行方式是怎样的吗?????????
页: [1]
查看完整版本: c++文件复制