Название: QProcess и tar Отправлено: ZIkos от Декабрь 05, 2007, 11:28 В своей программе я архивирую данные tar архиватором, мне необходимо чтобы лог архивирования отображался в QTextEdit.
Код: m_pProcessTar = new QProcess(); //Отслеживаем удачно ли запустился процесс архивации connect(m_pProcessTar, SIGNAL(error(QProcess::ProcessError)), this, SLOT(OnTarError(QProcess::ProcessError))); //Отображаем процесс архивации. Не работает!!!!!!!!!!!!!!!!!!!!! connect(m_pProcessTar, SIGNAL(readyReadStandardOutput()), this, SLOT(OnTarOutput())); connect(m_pProcessTar, SIGNAL(readyReadStandardError()), this, SLOT(OnTarOutput())); m_pProcessTar->setProcessChannelMode(QProcess::ForwardedChannels); QString strArguments = tr("tar cfv с:\123.tar c:\windows) m_pProcessTar->start(strArguments); m_pProcessTar->waitForFinished(); } void CCreateDistribTree::OnTarError(QProcess::ProcessError error) { if(error == QProcess::FailedToStart) { m_pCopyDialog->TarError(); } } void CCreateDistribTree::OnTarOutput() { QByteArray strNewText = m_pProcessTar->readAllStandardOutput(); m_pTextEdit->append(QString::fromLocal8Bit(strNewText)); strNewText = m_pProcessTar->readAllStandardError(); m_pTextEdit->append(QString::fromLocal8Bit(strNewText)); } Выполняя архивацию в командной строке лог архивирования отображается, а когда выполняется мой код, то архивация проходит нормально, но никакого лога НЕТ, и даже программа не попадает в слот OnTarOutput. Подскажите как с этим справиться? Название: Re: QProcess и tar Отправлено: Alex03 от Декабрь 05, 2007, 11:50 А убрать m_pProcessTar->waitForFinished(); ?
Название: Re: QProcess и tar Отправлено: ZIkos от Декабрь 05, 2007, 11:57 Название: Re: QProcess и tar Отправлено: Mikhail от Декабрь 05, 2007, 13:03 В своей программе я архивирую данные tar архиватором, мне необходимо чтобы лог архивирования отображался в QTextEdit. Код: m_pProcessTar = new QProcess(); //Отслеживаем удачно ли запустился процесс архивации connect(m_pProcessTar, SIGNAL(error(QProcess::ProcessError)), this, SLOT(OnTarError(QProcess::ProcessError))); //Отображаем процесс архивации. Не работает!!!!!!!!!!!!!!!!!!!!! connect(m_pProcessTar, SIGNAL(readyReadStandardOutput()), this, SLOT(OnTarOutput())); connect(m_pProcessTar, SIGNAL(readyReadStandardError()), this, SLOT(OnTarOutput())); m_pProcessTar->setProcessChannelMode(QProcess::ForwardedChannels); QString strArguments = tr("tar cfv с:\123.tar c:\windows) m_pProcessTar->start(strArguments); m_pProcessTar->waitForFinished(); } void CCreateDistribTree::OnTarError(QProcess::ProcessError error) { if(error == QProcess::FailedToStart) { m_pCopyDialog->TarError(); } } void CCreateDistribTree::OnTarOutput() { QByteArray strNewText = m_pProcessTar->readAllStandardOutput(); m_pTextEdit->append(QString::fromLocal8Bit(strNewText)); strNewText = m_pProcessTar->readAllStandardError(); m_pTextEdit->append(QString::fromLocal8Bit(strNewText)); } Выполняя архивацию в командной строке лог архивирования отображается, а когда выполняется мой код, то архивация проходит нормально, но никакого лога НЕТ, и даже программа не попадает в слот OnTarOutput. Подскажите как с этим справиться? Попробуй убрать : m_pProcessTar->setProcessChannelMode(QProcess::ForwardedChannels); Название: Re: QProcess и tar Отправлено: ZIkos от Декабрь 05, 2007, 13:10 Mikhail, убрал m_pProcessTar->setProcessChannelMode(QProcess::ForwardedChannels); тоже не помогло.
У кого нибудь есть еще идеи? Название: Re: QProcess и tar Отправлено: Вячеслав от Декабрь 05, 2007, 14:47 IMHO tar cvf
f требует имя файла ,а ты ему че скармливаешь ? ;) И man tar рулит ;) PS я-б еще -j или -z добавил ж) Название: Re: QProcess и tar Отправлено: ZIkos от Декабрь 05, 2007, 15:03 IMHO tar cvf f требует имя файла ,а ты ему че скармливаешь ? ;) И man tar рулит ;) PS я-б еще -j или -z добавил ж) f параметр для указания имени архива(без параметра f архив кладется на дискету). j параметр для добавления комментариев, они мне не нужны z параметр для сжатия, Мне хотябы пока без сжатия сделать, чтобы лог арихивирования прочитать А что такое man tar? Название: Re: QProcess и tar Отправлено: Alex03 от Декабрь 05, 2007, 15:34 Mikhail, убрал m_pProcessTar->setProcessChannelMode(QProcess::ForwardedChannels); тоже не помогло. Идеи....У кого нибудь есть еще идеи? 1. Запускать не tar (мало ли, мож там анализ какойнить откуда запущен и нужен ли вывод), а чтото с гарантированным выводом типа Код: cmd /c echo string Код: cmd /c type file.txt 3. огласить весь код. (в приведённом примере нет начала, есть ошибки...) Название: Re: QProcess и tar Отправлено: Mikhail от Декабрь 05, 2007, 15:50 По всему видно, что проблема проста как мир.
Как у тебя объявлено : OnTarOutput()? Скорее всего эта функция не объявлена слотом, поэтому нисего и не принимает. Проверь!!! ЕСли объявлена как слот, то выложи для обозрения include для проверки. Название: Re: QProcess и tar Отправлено: ZIkos от Декабрь 05, 2007, 15:53 Mikhail, убрал m_pProcessTar->setProcessChannelMode(QProcess::ForwardedChannels); тоже не помогло. Идеи....У кого нибудь есть еще идеи? 1. Запускать не tar (мало ли, мож там анализ какойнить откуда запущен и нужен ли вывод), а чтото с гарантированным выводом типа Код: cmd /c echo string Код: cmd /c type file.txt 3. огласить весь код. (в приведённом примере нет начала, есть ошибки...) запустил процесс с аргументами cmd /c echo string12312312312312 Все работает. А вот с таром не хочет дружить. Название: Re: QProcess и tar Отправлено: ZIkos от Декабрь 05, 2007, 16:07 наконец то удалось получить лог!!!!!
процесс надо запускать таким образом. m_tarProcess.start("cmd /c tar cfv c:\123.tar c:\windows"); Теперь остается вопрос. Это сработает по виндой, а как быть под линукс? Название: Re: QProcess и tar Отправлено: Вячеслав от Декабрь 05, 2007, 21:36 А тар-то у тебя какой кстати ?
Под пингвином в сторону [ba]sh смотреть .... и ктати -j это работать через bzip2 А вообще http://www.opennet.ru/man.shtml?topic=tar&category=1&russian=2 (http://www.opennet.ru/man.shtml?topic=tar&category=1&russian=2) И все-таки -f _требует аргумента_ правильнее ее пихать в данном случае последней иначе - возможны варианты .... Название: Re: QProcess и tar Отправлено: Alex03 от Декабрь 06, 2007, 07:18 m_tarProcess.start("cmd /c tar cfv c:\123.tar c:\windows"); Надеюсь в коде обратные слеши заэкранированны?да и в исходной QString strArguments = tr("tar cfv с:\123.tar c:\windows) Название: Re: QProcess и tar Отправлено: ZIkos от Декабрь 06, 2007, 19:50 m_tarProcess.start("cmd /c tar cfv c:\123.tar c:\windows"); Надеюсь в коде обратные слеши заэкранированны?да и в исходной QString strArguments = tr("tar cfv с:\123.tar c:\windows) заэкранированы. этот код приводил для примера, так что не уследил Название: Re: QProcess и tar Отправлено: ZIkos от Декабрь 07, 2007, 11:44 Кинитье пожалуйста сссылочку где можно скачать tar архиватор, который жмет в bz2.
Название: Re: QProcess и tar Отправлено: ритт от Декабрь 07, 2007, 17:49 ппц
ftp.gnu.org/gnu/tar/ ftp.gnu.org/gnu/bzip2/ ссылку на мингв дать? а ещё могу на гнувин ссылку дать! /* охренела молодёжь */ |