2010-11-09 6 views
3

Salut J'ai besoin d'écrire le résultat d'un mysqldump dans un fichier avec une commande windows standard.Diagnostics.Process - Vider la sortie vers le fichier

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
proc.EnableRaisingEvents = false; 
proc.StartInfo.WorkingDirectory = "sample directory"; 
proc.StartInfo.FileName = "mysqldump"; 
proc.StartInfo.Arguments = "-u root -pPassword --all-databases > db.sql"; 
proc.StartInfo.RedirectStandardOutput = false; 
proc.StartInfo.UseShellExecute = false; 
proc.Start(); 
proc.WaitForExit(); 

Mais il n'écrit pas déposer de cette façon ... Je ne veux pas lire la sortie, puis l'écrire dans un fichier, depuis mysqldump sortie peut devenir vraiment grand ... Toutes les solutions ?

Répondre

5

Essayez d'exécuter par cmd.exe et enquote la commande pour maintenir votre programme de gober le redirect:

proc.StartInfo.FileName = "cmd.exe"; 
proc.startinfo.Arguments = 
    "/c \"mysqldump -u root -pPassword --all-databases\" > db.sql" 
0

Pour la sortie canalisée, ShellExecute peut avoir besoin d'être true. Si cela ne marche pas, vous devrez peut-être le faire vous-même (soit gérer les événements de données, soit avoir une boucle de lecture/écriture asynchrone), mais la taille ne devrait pas être importante car vous ne devriez en lire que de petits morceaux .

+0

shellexecute = true ne fonctionne pas – EBAG

1

Si c'est beaucoup de sortie, vous pouvez utiliser l'événement proc.OutputDataReceived, dans le gestionnaire d'événements, il suffit d'écrire la sortie dans votre fichier.

Read the MSDN article here

Questions connexes