【发布时间】:2017-06-14 20:35:35
【问题描述】:
对于一些帮助你们的信息,我正在制作一个小程序,它将获取一个 .SQL 文件并使用 mysql.exe 将其恢复到用户 localhost phpMyAdmin。手动通过 MyAdmin 本身导入文件需要很长时间,因为它必须解压缩和解析信息,这种方法更快,而且它适用于我的同事,因为我们总是将备份和恢复推送到我们的 WAMP 进行试验。
我面临的一个问题是,无论如何我似乎都无法让它更改目录。我知道可执行文件在哪里启动就是系统将继承的路径,那我为什么不能简单地告诉它改变目录呢?
到目前为止,这是我的代码:
system("cd c:\wamp64\bin\mysql\mysql5.7.14\bin");
system("PAUSE");
system("dir");
system("PAUSE");
system("mysql.exe -u root -p dataBase < tables.sql");
注意:暂停和 system("dir") 在那里严格用于测试目的,一旦窗口吐回目录的正确内容,我就知道它有效,我只有第一个和最后一个程序中剩下的行。
更新:我被告知每次调用 system 都会创建一个新的 CMD 进程,这完全可以解释为什么 cd 不会影响任何东西,因为它正在打开一个新进程,更改目录,然后在下一行它正在调用一个新进程并暂停它。解决方法是什么?
更新 2:我决定使用 && 将多个命令连接在一起,但这限制了我的可用性和“样式”方面,但这不是问题,需要该程序作为运行& 完成的交易类型。
这是我想出的:
system("cd c:\\wamp64\\bin\\mysql\\mysql5.7.14\\bin && mysql.exe -u root -p dataBase < table.sql");
cout << "\n" << "The database 'dataBase' has been restored using 'table.sql' successfully!" << "\n\n";
return 0;
创建 .cmd 文件并使用 CreateProcess() 运行它有什么好处,或者使用我想出的方法有什么坏处吗?
注意:数据库名称和 .sql 文件不是从任何东西中提取的,名称将是静态的,因此我不必担心更新。
【问题讨论】:
-
请不要使用
system。它有很多,所以,很多问题...... -
1.您没有收到有关不良转义序列的警告吗? 2.每次调用系统都会打开一个新的命令会话。因此cd没有效果。
-
解决方法是什么?在一个 system() 调用中完成所有操作。
-
在您的 cmd.exe 参考中查找 &&。
标签: c++