在命令行中加参数的文件复制程序

这篇博文介绍使用命令行参数的编程方法,载体是用于文件复制的程序。这也是我用Markdown编辑器写的第一篇博文。Markdown在写《逆袭大学》时用过,写博文是第一次。

本文正文:

引子

下面的程序,可以完成由a.txt到b.txt的复制。

;int main( ){char ch;ifstream infile(“a.txt”,ios::in);ofstream outfile(“b.txt.dat”);while(infile.get(ch))outfile.put(ch);infile.close( );outfile.close();}

这个程序美中不足的是,要复制别的文件,只能告诉用户:“你自己改一改程序去吧。”天,小程同学,你真想失业了。 可以采取的做法,程序运行中让用户输入文件名。如运行中,提示:“请输入源文件:”输入a.txt或别的,再提示:“请输入目标文件:”,输入b.txt或别的,一个能满足需求的“文件复制器”完工了。

使用命令行

下面介绍一种在命令行世界中广泛使用的加参数的做法,这是一直想为弟子们见空就要介绍的内容。 我们的目标是:

运行:D:\CB\cpy>cpy source.c temp.c 结果:复制source.c,产生新文件temp.c

做法

建项目 cpy(你也可以建立其他的项目名,最后要生成对应的.exe可执行文件) 程序用中带参数的main函数:int main(int argc, char *argv[]);

其中:

int argc; //命令行由几部分构成char *argv[]; //指针数组,指向各部分的字符串

如运行

cpy source.c temp.c

参数argc和argv分别如下图:

这样,可以编出如下的程序:

;int main(int argc, char *argv[]){char ch;if( argc < 3){cerr<<“you must provide the source and target file.\n”;exit(1);}ifstream infile(argv[1],ios::in);ofstream outfile(argv[2], ios::out);while(infile.get(ch))outfile.put(ch);infile.close( );outfile.close();}

在编译、连接之后,,找到产生的.exe文件,就可以用命令行的形式,完成文件的复制了。

拓展

提一个问题,如果用

cpy a.txt b.txt …. x.txt

形式,要将将多个文件的内容合并到x.txt中,该如何去做? 发现这里要合并的文件数目不确定,这是解决问题中最关键的问题。 实际上,只要输入了命令行,文件数目是确定的。 命令行一共给了argc个参数,源文件一共有argc-2个,分别是argv[1]到argv[argc-2],目标文件是argv[argc-1],构造一个循环就可以完成这项目任务。 得到的程序是:

;int main(int argc, char *argv[]){char ch;if( argc < 3){cerr<<“至少要提供2个文件名.\n”;exit(1);}ofstream outfile(argv[argc-1], ios::out);ifstream infile;int i;for(i=1; i<=argc-2; ++i){infile.open(argv[i],ios::in); //打开源文件while(infile.get(ch))//完成复制outfile.put(ch);infile.close( );//关闭文件,循环回去后再打开另一个}outfile.close();return 0;}

人生没有彩排,每天都是现场直播。

在命令行中加参数的文件复制程序

相关文章:

你感兴趣的文章:

标签云: