2013-01-02 67 views
1

我終於有我的代碼修復噸蟲子後的工作,但我還是得到了一些小問題命令提示符數據亂碼

Dim myprocess As New System.Diagnostics.Process 
myprocess.StartInfo.FileName = "cmd.exe" 
myprocess.StartInfo.UseShellExecute = False 
myprocess.StartInfo.RedirectStandardOutput = True 
myprocess.StartInfo.RedirectStandardInput = True 
myprocess.StartInfo.WorkingDirectory = "C:\" 
myprocess.StartInfo.CreateNoWindow = True 
myprocess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden 
myprocess.Start() 

myprocess.StandardInput.WriteLine(prompt.Text) 
myprocess.StandardInput.Flush() 
myprocess.StandardInput.Close() 

prompt.Text = "" 
prompt.Text = myprocess.StandardOutput.ReadToEnd 

myprocess.StandardOutput.Dispose() 
myprocess.StandardOutput.Close() 

myprocess.WaitForExit() 
myprocess.Close() 

的問題是,如果我執行命令,如「樹」,它無法解釋組成樹的線。執行「樹/ A」解決了這個問題,但我想知道爲什麼只是簡單的舊「TREE」沒有得到正確的解釋。另外,一旦我執行諸如「TREE」之類的命令,我將無法輸入我的文本框,直到我使用我的清除功能。有趣的是,我能夠Backspace但不能輸入。

將此代碼粘貼到VB.NET並添加一個文本框和按鈕。你會明白我的意思。

  1. 爲什麼文本會變成亂碼?
  2. 爲什麼我無法鍵入我的文本框?

回答

3

您的文字,是因爲你的程序沒有使用的字節解碼右code page亂碼從輸出流中讀取。 TREE命令使用圖形字符來表示鏈接子目錄的行,但這些代碼點僅代表原生MS-DOS(美國英語)代碼頁code page 437中的線描字符。 /A開關使TREE命令使用標準的ASCII字符。

+0

有趣的是,我該如何指定「代碼頁437」。可能嗎?你知道vb.net的例子嗎? –

+0

而不是從'myprocess.StandardOutput'讀取,我會嘗試類似於Dim輸出爲新的StreamReader(myprocess.StandardOutput.BaseStream,New System.Text.Encoding(437))'並從中讀取。 – prprcupofcoffee

+0

可以在聲明爲'MustInherit'的類上使用新的'New'。這是我得到的錯誤。你確定你可以指定437嗎?我以爲你只能從VB.NET的列表中選擇,如UTF8,Big Endian ... –