2008-11-03 2 views
2

dans mon C# app je lance un processus 7z pour extraire une archive dans son répertoirecomment obtenir des informations sur l'erreur de 7z processus de commandLine

l'archive est située dans un répertoire aléatoire nommé sur le répertoire% TEMP% pour exemple

C: \ Documents and Settings \ User \ local Settings \ Temp \ vtugoyrc.fd2

(fullPathFilename = « C: \ Documents and Settings \ User \ local Settings \ Temp \ vtugoyrc .fd2 \ xxx.7z ")

mon code est:

sevenZipProcessInfo.FileName = SEVEN_ZIP_EXECUTABLE_PATH; 
sevenZipProcessInfo.Arguments = "x " + fullPathFilename; 
sevenZipProcessInfo.WindowStyle = ProcessWindowStyle.Hidden; 
sevenZipProcessInfo.UseShellExecute = true; 
sevenZipProcessInfo.WorkingDirectory = Path.GetDirectoryName(fullPathFilename); 
Process sevenZipProcess = Process.Start(sevenZipProcessInfo); 
if (sevenZipProcess != null) 
{ 
    sevenZipProcess.WaitForExit(); 
    if (sevenZipProcess.ExitCode != 0) 
     ...exit code is 2 (fatal error by the 7z help) 

Où puis-je trouver de la documentation plus élaborée?

Répondre

5

Vous utilisez 7 Zip comme processus externe ici. C'est l'équivalent d'appeler les commandes directement à partir de la ligne de commande.

Avez-vous envisagé d'utiliser une bibliothèque pour compresser/décompresser vos fichiers? Quelque chose que vous pouvez référencer dans votre projet C#.

Sharp Zip Lib est assez bien reknowned mais un Heres wrapper library spécifique pour l'utilisation de l'archive 7zip

+0

mais je choisi de ne pas aller dans ce sens, car au moins la bibliothèque standard 7z offre passer comme un éclair au niveau du fichier uniquement w/o archiver plusieurs fichiers en un seul – Hanan

2

En supposant que le processus écrit des erreurs à stderr/stdout, vous pouvez définir UseShellExecute false et rediriger stdout/stderr; il existe un exemple sur MSDN here (stderr) et here (stdout).

Si vous avez besoin de lire à la fois stderr et stdout, et utilisation WaitForExit(), alors les choses deviennent plus intéressantes - impliquant généralement soit quelques fils ou méthodes async.

Une autre option finale consiste à utiliser la redirection de tuyau dans la commande - à savoir 1>out.txt 2>&1 - ces tuyaux stdout dans out.txt, et les tuyaux stderr en sortie standard, de sorte que ce aussi va dans out.txt. Ensuite, lisez le out.txt.

+0

La façon dont je suis arrivé message d'erreur m'a montré que le problème était simplement de faire la même chose en utilisant la ligne de commande (cmd). – Hanan

0

Merci pour toute aide.

En tout cas le problème était l'utilisation de 'long-path-name' -> processus de ligne de commande ne peut pas trouver C: \ Documents and Settings \ (en raison des espaces dans le nom). Des solutions à ce qui peut être trouvé ici standard way to convert to short path in .net

Questions connexes