命令提示符数据乱码

时间:2013-01-02 06:12:11

标签: vb.net shell process vb.net-2010 command-prompt

我在修复了大量的bug之后终于让我的代码工作了,但我仍然遇到了一些小问题

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

问题是,如果我执行诸如“TREE”之类的命令,则无法解释构成树的行。执行“TREE / A”解决了这个问题,但我想知道为什么普通的旧“TREE”无法正确解释。

另外,一旦我执行了诸如“TREE”之类的命令,在使用Clear函数之前,我无法输入文本框。有趣的是,我能够退格但不能打字。

将此代码粘贴到VB.NET中并添加文本框和按钮。你会明白我的意思。

  1. 为什么文字会出现乱码?
  2. 为什么我无法输入文本框?

1 个答案:

答案 0 :(得分:3)

您的文字是乱码,因为您的程序没有使用正确的code page来解码从输出流中读取的字节。 TREE命令使用图形字符来表示链接子目录的行,但这些代码点仅表示code page 437中的行绘图字符,即本机MS-DOS(美国英语)代码页。 /A开关使TREE命令改为使用标准ASCII字符。