这两天在折腾着怎么在一个程序里调用另一个程序。。。。可以调用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、路径名分隔符是“\”,在程序里都要用“\\”转义



接下来,要了解,在程序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


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理