2010-01-10 5 views
1

Я восстанавливаю резервное копирование в MySql. Но mysql exe не заканчивается. Это мой код -C# - Процесс не завершается

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 работает хорошо, но этот метод не работает (они сильно различаются похожи)

Любые предложения.?

+2

Что у вас есть против циклов 'while'? –

+0

Мне очень нравится. –

+0

Jayanta: Не добавляйте заголовок «Закрыто», либо принимайте ответ, либо нажмите кнопку «Закрыть». –

ответ

0

Где код сидит? Полагаю, что входной поток (fileStream) не имеет EOF (возможно, это входящий канал из другого процесса? Или сетевой поток?), И поэтому вы ожидаете в Read в конце текущего данные. Попробуйте закрыть входящий поток?

(это может быть называетсяfileStream, но я не делаю предположение о том, что это на самом деле файл/FileStream ... Я был укушен такими предположениями до ;-p)

You также, возможно, захочется подумать о том, чтобы ввести using (file, возможно).

+0

"fileStream" - это заархивированный файл. Я проверил это. Все в порядке. –

6

Вы должны закрыть поток StandardInput:

stream.Close(); 
p.WaitForExit(); 

В противном случае программа не будет прекращать, поскольку он будет ожидать большего вклада.

+0

Спасибо. Теперь его работа прекрасна. –

Смежные вопросы