我正在MySql中恢复备份。但是mysql exe并没有终止。 这是我的代码 -
public override bool FullRestore(Stream fileStream)
{
try
{
ProcessStartInfo proc = new ProcessStartInfo();
string cmd = string.Format("--database {0} --user={1} --password={2}", config.GetDbName(), config.GetUserName(), config.GetPassword());
proc.FileName = "mysql";
proc.RedirectStandardInput = true;
proc.RedirectStandardOutput = false;
proc.Arguments = cmd;
proc.UseShellExecute = false;
proc.CreateNoWindow = true;
Process p = Process.Start(proc);
Stream stream = p.StandardInput.BaseStream;
Stream file = Utility.ZipNEncrypt.Unzip(fileStream, "XXXXXX");
byte[] bytes = new byte[1024];
for (int count = 0; (count = file.Read(bytes, 0, 1024)) > 0; )
{
stream.Write(bytes, 0, count);
}
stream.Flush();
p.WaitForExit();
file.Close();
return true;
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show(e.ToString());
return false;
}
}
我的BackUp方法运行良好,但这种方法不起作用。(它们的变化很相似)
有什么建议吗?
答案 0 :(得分:6)
您需要关闭StandardInput流:
stream.Close();
p.WaitForExit();
否则,程序将不会终止,因为它会期待更多的输入。
答案 1 :(得分:0)
代码在哪里?作为一个猜测,我会想象输入流(fileStream
)没有EOF(它可能是来自另一个进程的传入管道?还是网络流?)因此您正在等待{{1在当前数据的末尾。尝试关闭传入的流吗?
(它可能是称为 Read
,但我并没有假设它实际上是一个文件/ fileStream
...我被咬了之前的假设;-p)
您也可能需要考虑适当地引入FileStream
(或许using
)。