2013-10-15 98 views
1

我有一個.exe文件,它需要一個.txt文件作爲參數。但是,我無法使用vb.net中的代碼工作。當我使用cmd和文本文件運行.exe時,它工作正常。嘗試打開.txt文件作爲參數使用Process.Start()

Dim a As New ProcessStartInfo 
a.FileName = "C:\Users\Asim Rahman\Desktop\Project Input Files\DirectStiffness.exe" 
a.Arguments = "C:\Users\Asim Rahman\Desktop\Project Input Files\HW3A.txt" 
a.WindowStyle = ProcessWindowStyle.Maximized 
Process.Start(a) 

我也試過用其他方式打開程序和文件,但是我沒能使它工作。任何幫助將不勝感激。 謝謝!

+1

刪除完整路徑,爲什麼你有處理前的報價?你能否發表一段有意義的代碼? – varocarbas

+0

Dim a As New ProcessStartInfo a.FileName =「C:\ Users \ Asim Rahman \ Desktop \ Project Input Files \ DirectStiffness.exe」 a.Arguments =「C:\ Users \ Asim Rahman \ Desktop \ Project Input Files \ HW3A.txt」 a.WindowStyle = ProcessWindowStyle.Maximized 的Process.Start(一) – arahman

+0

這是我現在已經做了,但它仍然說同樣的事情。文件無法打開。 @varocarbas – arahman

回答

3

我假設你的exe文件,通過輸入參數的個數方式找到您的文本文件。
但是,您的文本文件的完整路徑包含空格,這會將參數分解爲多個元素。
您的程序引用了不完整路徑的第一個參數。

args[0] = "C:\users\asim" 
..... 

等等,對於您的路徑名中的每個空格都存在txt文件。

一個簡單的解決方法是指定WorkingDirectory從參數

Dim a As New ProcessStartInfo 
a.WorkingDirectory = "C:\Users\Asim Rahman\Desktop\Project Input Files" 
a.FileName = "DirectStiffness.exe" 
a.Arguments = "HW3A.txt" 
a.WindowStyle = ProcessWindowStyle.Maximized 
Process.Start(a) 
+0

這工作的人!非常感謝!! – arahman

+0

這很好奇。我測試了這些條件(在文件名和目錄名中都有空格),並且它在原始配置(沒有周圍引號和沒有指定工作目錄)下工作得很好!至少在.NET 4.0中。但是,以及...你的固定OP的問題,因此+1爲你:) – varocarbas

+0

這隻適用於如果你有文件,對不對?假設你想傳遞另一個參數,而不是引用一個文件 - 在這種情況下,你需要雙引號。但是,這解決了原來的問題:+1 –

1

這個問題可能是你需要引用您傳遞爲參數的文件名,因爲它包含空格。如果你沒有用雙引號把它包起來,你的應用程序將得到以下參數seperately:

C:\用戶\阿西姆
拉赫曼\桌面\項目
輸入
文件\ HW3A.txt

試試這個:

C#版本

a.Arguments = @"\"C:\Users\Asim Rahman\Desktop\Project Input Files\HW3A.txt\""; 

VB版

a.Arguments = """C:\Users\Asim Rahman\Desktop\Project Input Files\HW3A.txt""" 
+0

這會返回一個語法錯誤,讓我試試改變文件夾名稱 – arahman

+0

這是C#。並非所有在C#中可用的工作都可以在VB中使用。在VB中,你必須重複引號。無論如何,我對它進行了測試,似乎沒有必要用引號括住引號(即使名稱中有空格)。 – varocarbas

+0

對不起,我寫了C#,因爲我的VB.NET不是那麼流利。 –

相關問題