.net 进程和winrar中的Unicode字符
我正在使用下面的代码启动一个新流程,并使用winrar归档文件:.net 进程和winrar中的Unicode字符,.net,unicode,winrar,.net,Unicode,Winrar,我正在使用下面的代码启动一个新流程,并使用winrar归档文件: Private Function RunCmd(ParamArray commands As String()) As String Dim returnvalue As String = String.Empty Dim info As New ProcessStartInfo("cmd") info.UseShellExecute = False info.RedirectStandardIn
Private Function RunCmd(ParamArray commands As String()) As String
Dim returnvalue As String = String.Empty
Dim info As New ProcessStartInfo("cmd")
info.UseShellExecute = False
info.RedirectStandardInput = True
info.RedirectStandardOutput = True
info.CreateNoWindow = True
Using process__1 As Process = Process.Start(info)
Using sw As StreamWriter = process__1.StandardInput
Using sr As StreamReader = process__1.StandardOutput
For Each command As String In commands
sw.WriteLine(command)
IO.File.AppendAllText(workingDir & "\log.txt", command & vbCrLf)
Next
sw.Close()
returnvalue = sr.ReadToEnd()
sr.Close()
End Using
End Using
End Using
info = Nothing
Return returnvalue
End Function
此代码无法存档名称中包含unicode字符的文件。
我得到的反馈是:警告:没有文件
如果我在命令提示符下手动运行相同的命令,则所有操作都正常。
将命令输出到文件的行正确输出命令(使用unicode字符)
传递给此函数的命令示例如下:
rar.exe u "\\mypath\myRarFile.rar" -m5 -wE:\WorkingDir "\\pathToFile\miljö.txt"
谢谢,
Jason解决了我的问题:
Private Function RunCmd(ParamArray commands As String()) As String
Dim returnvalue As String = String.Empty
Dim info As New ProcessStartInfo("cmd")
info.UseShellExecute = False
info.RedirectStandardInput = True
info.RedirectStandardOutput = True
info.CreateNoWindow = True
Using process__1 As Process = Process.Start(info)
Using sw As StreamWriter = process__1.StandardInput
Using sr As StreamReader = process__1.StandardOutput
For Each command As String In commands
sw.WriteLine("chcp 65001")
sw.WriteLine(command)
Next
sw.Close()
returnvalue = sr.ReadToEnd()
sr.Close()
End Using
End Using
End Using
info = Nothing
Return returnvalue
End Function
Eugene Roshal是一个优秀的程序员,但Unicode从来都不是他的强项。使用库或移动到7-zip。