Russian Qt Forum
Ноябрь 24, 2024, 23:38
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
QProcess и tar
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QProcess и tar (Прочитано 10141 раз)
ZIkos
Гость
QProcess и tar
«
:
Декабрь 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.
Подскажите как с этим справиться?
«
Последнее редактирование: Декабрь 05, 2007, 11:45 от ZIkos
»
Записан
Alex03
Гость
Re: QProcess и tar
«
Ответ #1 :
Декабрь 05, 2007, 11:50 »
А убрать m_pProcessTar->waitForFinished(); ?
Записан
ZIkos
Гость
Re: QProcess и tar
«
Ответ #2 :
Декабрь 05, 2007, 11:57 »
Цитата: Alex03 от Декабрь 05, 2007, 11:50
А убрать m_pProcessTar->waitForFinished(); ?
Не помогло.
Записан
Mikhail
Программист
Offline
Сообщений: 587
Re: QProcess и tar
«
Ответ #3 :
Декабрь 05, 2007, 13:03 »
Цитата: 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.
Подскажите как с этим справиться?
Попробуй убрать :
m_pProcessTar->setProcessChannelMode(QProcess::ForwardedChannels);
Записан
ZIkos
Гость
Re: QProcess и tar
«
Ответ #4 :
Декабрь 05, 2007, 13:10 »
Mikhail, убрал m_pProcessTar->setProcessChannelMode(QProcess::ForwardedChannels); тоже не помогло.
У кого нибудь есть еще идеи?
Записан
Вячеслав
Гость
Re: QProcess и tar
«
Ответ #5 :
Декабрь 05, 2007, 14:47 »
IMHO tar cvf
f требует имя файла ,а ты ему че скармливаешь ?
И man tar рулит
PS я-б еще -j или -z добавил ж)
Записан
ZIkos
Гость
Re: QProcess и tar
«
Ответ #6 :
Декабрь 05, 2007, 15:03 »
Цитата: Вячеслав от Декабрь 05, 2007, 14:47
IMHO tar cvf
f требует имя файла ,а ты ему че скармливаешь ?
И man tar рулит
PS я-б еще -j или -z добавил ж)
f параметр для указания имени архива(без параметра f архив кладется на дискету).
j параметр для добавления комментариев, они мне не нужны
z параметр для сжатия, Мне хотябы пока без сжатия сделать, чтобы лог арихивирования прочитать
А что такое man tar?
Записан
Alex03
Гость
Re: QProcess и tar
«
Ответ #7 :
Декабрь 05, 2007, 15:34 »
Цитата: ZIkos от Декабрь 05, 2007, 13:10
Mikhail, убрал m_pProcessTar->setProcessChannelMode(QProcess::ForwardedChannels); тоже не помогло.
У кого нибудь есть еще идеи?
Идеи....
1. Запускать не tar (мало ли, мож там анализ какойнить откуда запущен и нужен ли вывод), а чтото с гарантированным выводом типа
Код:
cmd /c echo string
или
Код:
cmd /c type file.txt
2. Упростить код, (написать тестовый примерчик)
3. огласить весь код. (в приведённом примере нет начала, есть ошибки...)
Записан
Mikhail
Программист
Offline
Сообщений: 587
Re: QProcess и tar
«
Ответ #8 :
Декабрь 05, 2007, 15:50 »
По всему видно, что проблема проста как мир.
Как у тебя объявлено :
OnTarOutput()?
Скорее всего эта функция не объявлена слотом, поэтому нисего и не принимает.
Проверь!!!
ЕСли объявлена как слот, то выложи для обозрения include для проверки.
Записан
ZIkos
Гость
Re: QProcess и tar
«
Ответ #9 :
Декабрь 05, 2007, 15:53 »
Цитата: Alex03 от Декабрь 05, 2007, 15:34
Цитата: ZIkos от Декабрь 05, 2007, 13:10
Mikhail, убрал m_pProcessTar->setProcessChannelMode(QProcess::ForwardedChannels); тоже не помогло.
У кого нибудь есть еще идеи?
Идеи....
1. Запускать не tar (мало ли, мож там анализ какойнить откуда запущен и нужен ли вывод), а чтото с гарантированным выводом типа
Код:
cmd /c echo string
или
Код:
cmd /c type file.txt
2. Упростить код, (написать тестовый примерчик)
3. огласить весь код. (в приведённом примере нет начала, есть ошибки...)
запустил процесс с аргументами cmd /c echo string12312312312312
Все работает.
А вот с таром не хочет дружить.
Записан
ZIkos
Гость
Re: QProcess и tar
«
Ответ #10 :
Декабрь 05, 2007, 16:07 »
наконец то удалось получить лог!!!!!
процесс надо запускать таким образом.
m_tarProcess.start("cmd /c tar cfv c:\123.tar c:\windows");
Теперь остается вопрос. Это сработает по виндой, а как быть под линукс?
Записан
Вячеслав
Гость
Re: QProcess и tar
«
Ответ #11 :
Декабрь 05, 2007, 21:36 »
А тар-то у тебя какой кстати ?
Под пингвином в сторону [ba]sh смотреть ....
и ктати -j это работать через bzip2
А вообще
http://www.opennet.ru/man.shtml?topic=tar&category=1&russian=2
И все-таки -f _требует аргумента_ правильнее ее пихать в данном случае последней иначе - возможны варианты ....
«
Последнее редактирование: Декабрь 05, 2007, 21:46 от Вячеслав
»
Записан
Alex03
Гость
Re: QProcess и tar
«
Ответ #12 :
Декабрь 06, 2007, 07:18 »
Цитата: ZIkos от Декабрь 05, 2007, 16:07
m_tarProcess.start("cmd /c tar cfv c:\123.tar c:\windows");
да и в исходной
QString strArguments = tr("tar cfv с:\123.tar c:\windows)
Надеюсь в коде обратные слеши заэкранированны?
Записан
ZIkos
Гость
Re: QProcess и tar
«
Ответ #13 :
Декабрь 06, 2007, 19:50 »
Цитата: Alex03 от Декабрь 06, 2007, 07:18
Цитата: ZIkos от Декабрь 05, 2007, 16:07
m_tarProcess.start("cmd /c tar cfv c:\123.tar c:\windows");
да и в исходной
QString strArguments = tr("tar cfv с:\123.tar c:\windows)
Надеюсь в коде обратные слеши заэкранированны?
заэкранированы. этот код приводил для примера, так что не уследил
Записан
ZIkos
Гость
Re: QProcess и tar
«
Ответ #14 :
Декабрь 07, 2007, 11:44 »
Кинитье пожалуйста сссылочку где можно скачать tar архиватор, который жмет в bz2.
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...