J'ai un programme qui utilise un outil de ligne de commande tiers pour générer des journaux. La 3ème partie génère toutes ses sorties vers le STDOUT, que l'utilisateur doit ensuite utiliser la commande " > test.txt"
pour enregistrer le fichier.Comment enregistrer les sorties STDOUT dans un fichier texte?
Toutefois, le programme génère en quelque sorte une certaine quantité de rapport généré mais pas le rapport entier. Ce fut test en utilisant la commande
C:\Test\ftk\ripxp>ripxp.exe -r C:\test\ftk\ntuser.dat -d "C:\System Volume\_rest ore{BB12863B-2C77-46C9-BCDA-1810E52F1089}" -p runmru > C:\test\test05.txt
sur la console de ligne de commande qui fonctionne et sur le programme qui ne fonctionne que partiellement.
Les erreurs ont été réduites à l'erreur d'argument ou à la partie d'erreur d'enregistrement de fichier (streamReader). Par conséquent, l'erreur peut être due à l'enregistrement incorrect du STDOUT.
Par conséquent, quelqu'un peut-il vous conseiller sur les codes? Merci!
Les arguments en faveur de l'outil 3ème partie (2008 H. Carvey):
RipXP v.20081001 - CLI RegRipper tool
RipXP [-r Reg hive file] [-p plugin module][-d RP dir][-lgh]
Parse Windows Registry files, using either a single module from the plugins folder.
Then parse all corresponding hive files from the XP Restore Points (extracted from
image) using the same plugin.
-r Reg hive file...Registry hive file to parse
-g ................Guess the hive file (experimental)
-d RP directory....Path to the Restore Point directory
-p plugin module...use only this module
-l ................list all plugins
-h.................Help (print this information)
Ex: C:\>rip -g
C:\>rip -r d:\cases\ntuser.dat -d d:\cases\svi -p userassist
All output goes to STDOUT; use redirection (ie, > or >>) to output to a file.
copyright 2008 H. Carvey
Les Codes:
static void Main(string[] args)
{
// Automatically finds folder that starts with _restore
DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\System Volume\");
DirectoryInfo restoreFolder = directoryInfo.GetDirectories().FirstOrDefault(d => d.Name.StartsWith("_restore"));
// Gets the folder name
String baka = restoreFolder.Name;
if (restoreFolder == null)
throw new DirectoryNotFoundException();
Process process = new Process();
process.StartInfo.FileName = @"C:\test\ftk\ripxp\ripxp.exe";
process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d C:\System Volume\" + restoreFolder.Name + " -p runmru";
process.StartInfo.CreateNoWindow = false;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardError = true;
process.Start();
String text = @"-r C:\test\ftk\ntuser.dat -d C:\System Volume\" +restoreFolder.Name + " -p runmru";
Console.WriteLine(baka);
Console.WriteLine(text);
// Strangely the program only outputs the first section "-r C:\test\ftk\ntuser.dat" argument results.....
System.IO.StreamReader reader = process.StandardOutput;
String sRes = reader.ReadToEnd();
StreamWriter SW;
SW = File.CreateText(@"C:\test\test01.txt");
SW.WriteLine(sRes);
SW.Close();
Console.WriteLine("File Created Successfully");
reader.Close();
}
Si vous ajoutez 'Console.Out.Flush() ; 'après' Console.WriteLine (texte); ', voyez-vous la ligne entière alors? – SwDevMan81
Si une autre Console.WriteLine (texte); a été placé après la Console.Out.Flush(); alors le texte peut être vu. – JavaNoob