Quand je lance cette ligne de commande:Comment faire pour empaqueter des fichiers en utilisant 7z avec Delphi et montrer le pourcentage fait?
7z a 1.zip J:\test.mp4
je peux voir combien en% est fait. Lorsque j'ai essayé d'exécuter ceci à partir de Delphi en utilisant CreateProcess et CreatePipe, je n'ai rien obtenu jusqu'à ce que le fichier soit compressé. Ensuite, il a affiché la sortie finale de 7zip.
Mon code ressemble à ceci:
Stream:= THandleStream.Create(hRead);
try
if not CreateProcess(nil, PChar(Cmd), nil, nil,
True, 0, nil, nil, StartupInfo,
ProcessInformation) then
RaiseLastOSError;
repeat
if not GetExitCodeProcess(ProcessInformation.hProcess, ExitCode) then
RaiseLastOSError;
while Stream.Position < Stream.Size do
begin
Stream.Read(C, 1);
if (C = #13) then
begin
Memo1.Lines.Add(S);
S := '';
Application.ProcessMessages;
end
else if C <> #10 then
begin
S := S+C;
end;
end;
until ExitCode <> Still_Active;
finally
Stream.Free;
end;
Je ne veux pas simplement créer un ZIP Archive- Je sais qu'il ya des façons plus agréables de le faire à Delphes. Je veux interagir avec une console applications. La sortie de nombreuses applications de console peut être traitée avec le code que j'ai posté, mais elle échoue avec 7zip - c'est pourquoi je demande à propos de 7zip ici. Quelle est la particularité de 7zip que sa sortie ne peut pas être capturée correctement? Comment capturer la sortie d'applications comme cette 7zip?
Lire les informations de progression d'une application en ligne de commande qui utilise 'stdout' est difficile. Y a-t-il une raison pour laquelle vous utilisez 7-Zip depuis la ligne de commande pour créer des fichiers '.zip'? Il y a d'autres options qui sont plus conviviales, comme [TurboPower Abbrevia] (http://sourceforge.net/projects/tpabbrevia/), freeware avec source. Il est trivial de connecter la compression zip d'Abbrevia à une barre de progression, et si vous écrivez une application console, il y a des événements qui vous permettront de le faire facilement aussi. –
Faire un fichier ZIP est plutôt un exemple que mon objectif. Je veux savoir comment je peux exécuter diverses applications en ligne de commande et capturer la sortie. La méthode que j'ai mentionnée fonctionne bien pour certaines applications, mais pas pour 7zip, donc je cherche une meilleure méthode. – Tom
Ah, j'ai compris. Votre question concerne spécifiquement l'utilisation de 7-Zip depuis la ligne de commande et montre les progrès, mais vous ne le pensez pas vraiment; tu veux dire autre chose. :) Veuillez éditer votre question pour demander ce que vous voulez vraiment savoir, alors ce n'est pas trompeur et n'attire pas les réponses qui ne sont pas applicables. Merci. :) –