把自己n久以前某个博客里的文章移植过来的说~~~
Posted on 2011-02-15 23:19
这两天在折腾着怎么在一个程序里调用另一个程序。。。。可以调用system函数,通过控制台调用那另一个程序。
先ps:我要做的是运行RunTest.exe,其间调用DataMaker.exe生成数据,作为STD_STL.exe的测试数据,运行完RunTest.exe后有STD_STL.exe运行结果,放在指定的文件里。
再ps:
void system(const string& cmd)
{
system(cmd.c_str());
}
const string catalog = "E:\\codes\\VisualStudio2010\\"; \\存放RunTest和DataMaker等项目的目录
1、路径名不能有空格
2、windows下路径名分隔符是“\”,在程序里都要用“\\”转义
接下来,要了解,在程序RunTest运行的时候,可以通过“cd”打开相应的目录,但是该语句执行完后又会马上回到RunTest\RunTest目录下。
比如:我现在要打开DataMaker里的Debug文件夹,运行里面的DataMaker.exe,我要把这两句命令写在同一个语句里,不能分为两个语句写(即一个语句打开文件夹,下一个语句运行DataMaker.exe),因为在第一个语句运行完后会默认回到RunTest\RunTest这个目录下,这时候再要求程序运行DataMaker.exe的话会返回 “DataMaker.exe不是内部或外部命令,也不是可运行的程序或批处理文件”。
system("cd " + catalog + "DataMaker\\Release && DataMaker.exe > in.txt");
这一句的意思是打开Release文件夹并运行DataMaker.exe,结果放在当前目录(即Release文件夹)下的in.txt文件里(若无此文件则会自动生成)。
【一些常用的dos命令】
1、打开命令cd
格式:cd 路径
如:cd E:\codes\DataMaker
2、复制命令copy:
格式:copy 源文件 目标文件
如:copy E:\codes\a.txt E:\a.txt
这样就会把codes文件夹里的a.txt文件复制到E盘目录下。
若:copy E:\codes\a.txt E:\b.txt
这样E盘目录下就会有个b.txt文件,内容与a.txt文件一样。
如果要把文件复制到目前路径下,则目标文件可省去路径,直接写上文件名即可。
如:已在E盘目录下:
copy codes\a.txt b.txt
3、建立命令md
在当前目录下新建文件:md 文件
在指定目录下新建文件:md 路径+文件
如:md E:\codes\test
会在codes目录下生成名为test的文件夹
4、显示命令dir
dir 路径
如:dir E:\codes
显示codes文件夹里的所有目录及其子目录下的所有文件
5、比较命令fc
fc 对比文件1 对比文件2
如:fc E:\codes\a.txt E:\b.txt
若两个文件一样,则返回“找不到异常”
附上此次项目测试中在Linux下用到的命令:
1、打开命令
cd E:\codes\VisualStudio2010\DataMaker\Release && DataMaker.exe > in.txt
<--> ../DataMaker/Release/DataMaker > in.txt
Linux下执行程序没有exe后缀,而且分隔符是不同的~
不需要写E:\codes\VisualStudio2010,因为RunTest跟DataMaker等项目都是在同个目录下。而且在win下,生成的in.txt存在于DataMaker\Release目录下,而Linux下则是存在于RunTest/RunTest目录下。
2、比较命令
fc STD_STL.out LSS_STL.out
<--> diff STD_STL.out LSS_STL.out