【问题标题】:Command Prompt data Garbled命令提示符数据乱码
【发布时间】:2013-01-02 06:12:10
【问题描述】:

在修复了大量错误后,我的代码终于可以正常工作了,但我仍然遇到了一些小问题

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. 为什么我无法在文本框中输入内容?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 很有趣,那么如何指定“代码页 437”。是否可以?你知道 vb.net 的例子吗?
    • 我不会从myprocess.StandardOutput 读取,而是尝试使用Dim output As New StreamReader(myprocess.StandardOutput.BaseStream, New System.Text.Encoding(437)) 并从中读取。
    • 显然“New”不能用于声明为“MustInherit”的类。这是我得到的错误。您确定可以指定 437 吗?我以为你只能从 VB.NETs 列表中选择,例如 UTF8、Big Endian...
    • 很抱歉 - 应该是 System.Text.Encoding.GetEncoding(437)。见msdn.microsoft.com/en-us/library/wzsz3bk3.aspx
    • 像个魅力男一样工作,你就是炸弹!!!另外,你知道为什么我的文本框在“TREE”命令执行后会冻结吗?一切都很好,但它不允许我输入,只有退格?这不会发生在诸如“CD”之类的命令上。
    猜你喜欢
    • 2013-07-28
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2010-11-30
    • 2016-06-21
    • 2017-04-22
    相关资源
    最近更新 更多