Java 进程找不到正确的文件位置 我创建了在MySQL中备份和恢复数据库的C++程序。这些C++程序都使用了两个文件夹,即:代码>读代码< /COD>和保存< /代码>。readerCode包含mysql中包含命令的文本文件(或脚本)。保存文件夹是存储备份的地方。我将程序和文件夹存储在C:\AwesomeDatabase\ext中
当我通过cmd运行程序时,命令成功运行。它在saves文件夹中生成一个.sql文件。但是当我使用进程生成器运行java程序时,java程序可以运行可执行程序(用于备份和恢复),但是C++程序找不到它要查找的任务文件。提前谢谢 来自Process.java的代码片段Java 进程找不到正确的文件位置 我创建了在MySQL中备份和恢复数据库的C++程序。这些C++程序都使用了两个文件夹,即:代码>读代码< /COD>和保存< /代码>。readerCode包含mysql中包含命令的文本文件(或脚本)。保存文件夹是存储备份的地方。我将程序和文件夹存储在C:\AwesomeDatabase\ext中,java,c++,mysql,netbeans,processbuilder,Java,C++,Mysql,Netbeans,Processbuilder,当我通过cmd运行程序时,命令成功运行。它在saves文件夹中生成一个.sql文件。但是当我使用进程生成器运行java程序时,java程序可以运行可执行程序(用于备份和恢复),但是C++程序找不到它要查找的任务文件。提前谢谢 来自Process.java的代码片段 private void menuItemBackupActionPerformed(java.awt.event.ActionEvent evt) {
private void menuItemBackupActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
String cmd [] = {"\"C:\\AwesomeDatabase\\ext\\DBBackup.exe\"", "-d"};
ProcessBuilder builder = new ProcessBuilder ("\"C:\\AwesomeDatabase\\ext\\DBBackup.exe\"", "-d");
builder.redirectErrorStream (true);
Process p = builder.start();
java.io.BufferedReader r = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
} catch (java.io.IOException ioe) {
System.err.println ("Fatal Error! Back up file not found!\n" + ioe);
}
}
是的,所以当单击menuItemBackup
时,java将启动一个进程。这是我的DBBackup.cpp
#include <iostream>
#include <cstdlib>
#include <cstring>
#include "backup_head.h"
using namespace std;
//void secureBackup (void);
void normalBackup (void);
int
main (int argc, char *argv[])
{
if (argc > 1) {
if (strcmp (argv [1], "-s") == false) {
//secureBackup();
} else if (strcmp (argv [1], "-d") == false) {
normalBackup();
} else {
cout << "Invalid Command Line Arguments!" << endl;
Sleep (500);
}
} else {
cout << "Invalid Process Spawn!" << endl;
Sleep (500);
}
return (0);
}
void
normalBackup (void)
{
/* Fetch Location Variables */
Program_Path progpath = "";
Change_Directory cd = "CD";
/* Back Up Variables */
Program_Name progdump = "mysqldump";
Database_Name dbname = "sampledb";
Directory_Name dirName = "saves";
Dump_Name dumpName = "BackUpNow";
Username username = "root";
Password password = "root";
/* Delete Old Back Up */
Command delCommand = "DEL";
File_Name file = "DBBackUp";
File_Directory fileDir = "saves";
/* Commands */
_getcwd (progpath, sizeof (progpath));
_chdir (progpath);
SetCurrentDirectory (progpath);
Command redir = cd + " " + "\"" + string(progpath) + "\"";
Command backup = progdump + " " + "-u " + username + " " + "-p" + password + " " + dbname + " > " + dirName + "/" + dumpName + ".sql";
Command delOld = delCommand + " \"" + fileDir + "/" + file + ".sql\"";
cout << "Back Up process is on-going..." << endl << "Please wait for a moment..." << endl;
Sleep (500);
system (redir.c_str());
system (delOld.c_str());
system (backup.c_str());
cout << "Back Up Completed Successfully!";
Sleep (500);
return;
}
问题是该函数创建了一个新进程,并在该进程中运行
cd
命令。请阅读有关WIN32系统调用或CRT函数的内容。我尝试过并包含在您添加的函数上方的代码中。它没有解决问题,但非常感谢您!我发现java程序从C++代码中运行C++程序,所以C++程序本身找不到正确的路径。
Back Up process is on-going...
Please wait for a moment...
The system cannot find the path specified.
The system cannot find the path specified.
Back Up Completed Successfully!