我正在解決目錄中的空格導致運行 exp.exe 的程式崩潰的問題。用戶首先從他們想要的任何目錄中選擇一個 .dmp 檔案,然后用于構建引數串列。此引數串列包含要運行的命令,在本例中為 exp.exe、.dmp 檔案名、在檔案名所在目錄中創建的日志檔案,以及一些其他引數。然后使用 ProcessBuilder 執行以下操作:
public static ProcessBuilder build;
build = new ProcessBuilder();
build.command(args);
build.redirectErrorStream(true);
process = build.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
當檔案來自的目錄沒有任何空格時,exp.exe 按預期運行并按預期列印行。但是,當檔案所在目錄確實包含空格時,exp.exe 不會運行并在輸出錯誤代碼 LRM-00101: unknown parameter name 后終止。
這是一個不起作用的目錄示例
C:\Users\Me\OneDrive - Folder\Desktop\test\log.dmp
諸如那個目錄將被錯誤處理并輸出
LRM-00101: unknown parameter name 'Folder\Desktop\test\log.dmp'
這是一個運行的目錄示例
C:\Users\Me\Downloads\test\log.dmp
在不起作用的示例目錄中,ProcessBuilder 通過將“-”之前的所有內容視為不是目錄的一部分來錯誤地獲取目錄,這導致它失敗。我已經嘗試在最初通過執行讀取目錄時用雙引號轉義目錄
"\"" dmp_filename "\""
但這不起作用,類似執行緒中的其他建議似乎并不適用。
這是傳入引數的確切代碼
args = [exp.exe, userid=123@test, buffer=50000000, file=C:\Users\Me\OneDrive - Folder\Desktop\test\log.dmp, owner=test, compress=n, grants=y, indexes=y, direct=no, log=C:\Users\Me\OneDrive - Folder\Desktop\exp_log_test.log, rows=y, consistent=y, object_consistent=y, triggers=y, statistics=none, constraints=y]
我將不勝感激任何幫助。
uj5u.com熱心網友回復:
檔案名或目錄名中的空格必須用\!
String file = "C:\Users\Me\OneDrive - Folder\Desktop\test\log.dmp";
file = file.replaceAll(" ", "\\ ");
雙重轉義不是很好!
uj5u.com熱心網友回復:
看起來您將所有引數作為由空格分隔的單個字串傳遞,并為包含空格的路徑名加上引號。如果是這樣,只需切換到 String[] 并省略轉義。例如開關:
String args = "app.exe \"path with space\" otherarg";
到:
String[] args = new String[] {
"app.exe", "path with space", "otherarg"
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/414157.html
標籤:
上一篇:檔案寫入期間的競爭條件
