Java 进程找不到正确的文件位置 我创建了在MySQL中备份和恢复数据库的C++程序。这些C++程序都使用了两个文件夹,即:代码>读代码< /COD>和保存< /代码>。readerCode包含mysql中包含命令的文本文件(或脚本)。保存文件夹是存储备份的地方。我将程序和文件夹存储在C:\AwesomeDatabase\ext中

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) {

当我通过cmd运行程序时,命令成功运行。它在saves文件夹中生成一个.sql文件。但是当我使用进程生成器运行java程序时,java程序可以运行可执行程序(用于备份和恢复),但是C++程序找不到它要查找的任务文件。提前谢谢

来自Process.java的代码片段

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!