Текст из консольного 7z ВО ВРЕМЯ его выполнения

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
qqqq1
новенький
Сообщения: 12
Зарегистрирован: 20.08.2010 13:01:46

Текст из консольного 7z ВО ВРЕМЯ его выполнения

Сообщение qqqq1 »

Смысл – показать, что моя программа не зависла и показать сколько ещё осталось (разархивирование – один из нескольких, достаточно долгих этапов обработки данных). В одном архиве обычно несколько файлов.

С получением вывода из консоли после распаковки ВСЕХ файлов, проблем не возникает (делаю почти всё как в последнем примере – "чтение больших объёмов вывода" – из Lazarus Wiki - http://wiki.lazarus.freepascal.org/Executing_External_Programs/ru).
Код:

Код: Выделить всё

  max_l:=1024; 
  try
     P.CommandLine:=Utf8toSys(7z e file.rar -oC:\tmp -y);
     P.Options := [poUsePipes, poNoConsole];
     P.Execute;
     while P.Running do begin
       if P.output.NumBytesAvailable>0 then begin
           M.SetSize(BytesRead + max_l);
           i := P.Output.Read((M.Memory + BytesRead)^, max_l);
       end else i:=0;
       if i > 0 then begin //это не выполняется
         Inc(BytesRead, i);
         M.SetSize(BytesRead);
         Form1.Mm_main.Lines.Add('...');
         Application.ProcessMessages;
       end
       else Sleep(100);
     end;
     if Form1.Visible=true then Application.ProcessMessages;
     Result :=P.ExitStatus;
   finally
     P.Free;
     M.Free;


Но ВО ВРЕМЯ распаковки ничего получить не могу (NumBytesAvailable = 0). В чём может быть проблема?

Сейчас для демонстрации процесса распаковки приходится запускать на таймере проверку количества файлов в директории, куда распаковываются файлы. До этого получаю от 7zip количество файлов в архиве (команда 7z l archive.zip). Выглядит как-то не красиво поэтому решил попробовать по-другому, но не выходит...
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Re: Текст из консольного 7z ВО ВРЕМЯ его выполнения

Сообщение Nik »

Распаковка идёт в отдельном потоке?
qqqq1
новенький
Сообщения: 12
Зарегистрирован: 20.08.2010 13:01:46

Re: Текст из консольного 7z ВО ВРЕМЯ его выполнения

Сообщение qqqq1 »

Да. Запускается консольный 7zip только без окошка.
Ответить