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

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

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

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

Сообщение qqqq1 » 16.05.2011 16:49:30

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

С получением вывода из консоли после распаковки ВСЕХ файлов, проблем не возникает (делаю почти всё как в последнем примере – "чтение больших объёмов вывода" – из 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). Выглядит как-то не красиво поэтому решил попробовать по-другому, но не выходит...
qqqq1
новенький
 
Сообщения: 12
Зарегистрирован: 20.08.2010 13:01:46

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

Сообщение Nik » 16.05.2011 17:33:29

Распаковка идёт в отдельном потоке?
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

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

Сообщение qqqq1 » 16.05.2011 17:43:09

Да. Запускается консольный 7zip только без окошка.
qqqq1
новенький
 
Сообщения: 12
Зарегистрирован: 20.08.2010 13:01:46


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46

Рейтинг@Mail.ru