2010-01-10 7 views
1

Je suis en train de restaurer la sauvegarde dans MySQL. Mais le mysql exe ne se termine pas. Ce est mon code -C# - Le processus ne se termine pas

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; 
     } 
    } 

Ma méthode de BackUp fonctionne bien, mais cette méthode ne fonctionne pas (Ils sont varient beaucoup semblables)

toutes les suggestions.?

+2

Qu'est-ce que vous avez contre les boucles 'while'? –

+0

Je suis très à l'aise avec pour. –

+0

Jayanta: N'ajoutez pas "Fermé" au titre, acceptez une réponse ou cliquez sur le bouton Fermer. –

Répondre

0

Où le code est-il installé? En guise de supposition, j'imagine que le flux d'entrée (fileStream) n'a pas d'EOF (est-ce peut-être un tuyau entrant d'un autre processus? Ou un flux réseau?) Et donc vous attendez Read à la fin du courant Les données. Essayez de fermer le flux entrant?

(il pourrait être appelé fileStream, mais je ne suis pas en faisant l'hypothèse qu'il est en fait un fichier/FileStream ... J'ai été mordu par ces hypothèses avant ;-P)

Vous

pourrait aussi vouloir penser à introduire using comme approprié (file, peut-être).

+0

"fileStream" est un fichier compressé. Je l'ai vérifié. C'est bon. –

6

Vous devez fermer le flux StandardInput:

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

Sinon, le programme ne se termine pas parce qu'il sera plus attendu entrée.

+0

Merci. Maintenant, c'est parfait. –

Questions connexes