2010-10-25 28 views
0

Existe-t-il un moyen simple de lancer un processus dans .NET et de rediriger ses sorties vers un fichier? Je sais que dans Win API je peux passer un handle de fichier à la fonction CreateProcess. Dans .NET je peux faire quelque chose commeRediriger la sortie std de l'objet Process vers le fichier .net

startInfo.RedirectStandardOutput = true; 

puis utilisez BeginOutputReadLine et StandardOutput pour obtenir les données et l'enregistrer dans un fichier. Mais cela semble un peu plus lourd que ce que l'OS peut gérer lui-même.

Merci

Répondre

0

vous pouvez exécuter le fichier en tant que someApp.exe >logfile.txt

+0

Je crains de ne pas pouvoir lancer ceci à partir de .NET. Je pourrais exécuter quelque chose comme "cmd.exe/c someApp.exe> ​​fichier.txt" mais c'est toujours une solution de contournement. – Elephantik

+0

@Elephantik oui, il pourrait être nécessaire. Ce que vous voulez est essentiellement une solution de contournement. – Andrey

+0

Je ne serais pas d'accord qu'une fonctionnalité supportée par OS est solution de contournement;) – Elephantik

2

Un peu en retard, mais cela me fait une meilleure réponse: Capturing binary output from Process.StandardOutput

Process cmdProcess = new Process(); 
ProcessStartInfo cmdStartInfo = new ProcessStartInfo(); 
cmdStartInfo.FileName = "samtools"; 

cmdStartInfo.RedirectStandardError = true; 
cmdStartInfo.RedirectStandardOutput = true; 
cmdStartInfo.RedirectStandardInput = false; 
cmdStartInfo.UseShellExecute = false; 
cmdStartInfo.CreateNoWindow = true; 

cmdStartInfo.Arguments = "view -u " + BamFileName + " " + chromosome + ":" + start + "-" + end; 

cmdProcess.EnableRaisingEvents = true; 
cmdProcess.StartInfo = cmdStartInfo; 
cmdProcess.Start(); 

using (FileStream str = new FileStream(outputFilePath, FileMode.Create)) 
{ 
    cmdProcess.StandardOutput.BaseStream.CopyTo(str); 
} 

Si vous voulez faire de manière asynchrone, vous pouvez utilisez plutôt CopyToAsync et attendez la tâche retournée ou ajoutez un ContinueWith pour terminer. Cela fonctionne très bien pour moi.

+0

Points bonus pour le fait que votre exemple utilise samtools (quelque chose que j'ai utilisé toute la journée aujourd'hui =]) – JHubbard80