Russian Qt Forum
Ноябрь 25, 2024, 05:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QT и Архивы  (Прочитано 9090 раз)
ysfox
Гость
« : Сентябрь 02, 2010, 11:43 »

Добрый день всем
Возник вопрос по архивам. думаю много кому тоже пригодится.
Суть вопроса мроста: с помощю командной строки считываю с флешки архив, потом ево разархивовываю и запускаю в нем бат файл который делаэт уже сам все дальше
Код:
system("cp -R /media/sda1/imya.zip /home/root");
system("unzip imya.zip /home/root");
system( "imya.bat");

если так делать то архив ещо не успел считатся как уже разархивовывается и запускается бат Грустный
как проверить разархивовался и считался архив или нет и возникли при етом ошыбки или нет?

Был бы очень благодерен за Ваш совет Улыбающийся

ПС: есть одно решение но оно мне не подхлдит запускать из програмы бат файл а уже в нем чтоб были прописаны строки разархивовывания и запуска... такой вариант точно работает - но ето не вариант)... так как мне нужно считать 1н файл с флешки потом ево разпаковать и дальше делать с ним уже все что надо Улыбающийся... но вот как проверить все ли зделано и разпаковано никак не найду...
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Сентябрь 02, 2010, 11:47 »

QProcess
Записан
ysfox
Гость
« Ответ #2 : Сентябрь 02, 2010, 11:49 »

QProcess

пробовал не катит Улыбающийся, никак не могу к нему прицепить сигнал завершения и как обработать удачно или нет?
может у Вас есть нормальный пример?
Записан
BRE
Гость
« Ответ #3 : Сентябрь 02, 2010, 11:53 »

Попробуй так:
Код:
system("cp -R /media/sda1/imya.zip /home/root && unzip imya.zip /home/root && imya.bat");

или сделай еще один скрипт выполняющий все эти операции и запускай уже его.
Записан
ysfox
Гость
« Ответ #4 : Сентябрь 02, 2010, 11:56 »

Пасиб Улыбающийся
щас попробую етот вариант и отпишусь - было б очень хорошо если б сработал)))
Записан
merke
Гость
« Ответ #5 : Сентябрь 02, 2010, 12:09 »

Сделал значит так: ты наверняка знаешь что у тебя хранится в архиве т.е. количество файлов и их имена. После распаковки входи в цикл, используй QDir::entryList() в цикле чтобы получать все содержимое той папки куда разархивируешь. Как только список будет валидным, т.е. весь заполнится по шаблону ты выходишь из цикла и запускаешь батник.
Записан
merke
Гость
« Ответ #6 : Сентябрь 02, 2010, 12:12 »

Пример использования QDir

Код:
#include <QDir>
#include <iostream>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    QDir dir;
    dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
    dir.setSorting(QDir::Size | QDir::Reversed);

    QFileInfoList list = dir.entryInfoList();
    std::cout << "     Bytes Filename" << std::endl;
    for (int i = 0; i < list.size(); ++i) {
        QFileInfo fileInfo = list.at(i);
        std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10)
                                                .arg(fileInfo.fileName()));
        std::cout << std::endl;
    }
    return 0;
}
Записан
ysfox
Гость
« Ответ #7 : Сентябрь 02, 2010, 12:26 »

BRE пасиб - сработало!!!! пасиб запускается все как надо Улыбающийся... выходит такой вариант записи работает как бат - запускает все по очереди и только когда закончился предыдущий процес а ето какраз то что мне надо Улыбающийся
но ето так черновой вариант?, тут я не смогу обработать ошыбки (если фаил не открился не скачался и так далее)... хотя тут уже можно подключить кюпроцес и смотреть что выкинуло в терминалку Улыбающийся, есть над чем подумать Улыбающийся

Александр Ваш вариант щас ещо попробую Улыбающийся
Записан
Denjs
Гость
« Ответ #8 : Сентябрь 02, 2010, 13:42 »

Ещё можно перехватывать потоки ввода-вывода и мониторить их на предмет нужных сообщений.
если надо - где-то я уже приводил как это делать....
Записан
SASA
Гость
« Ответ #9 : Сентябрь 05, 2010, 13:41 »

Напишите вирус, который встроиться в систему. Он будет выдавать логи по всем событиям системы. Отфильтруйте только, те которые говорят о завершении процесса. Першлите получившейся лог на сервер в Австралии. Сервер обработает лог, и скажет что случилось.
З.С. Пред пересылкой не забудте зашифровать лог.
Записан
ysfox
Гость
« Ответ #10 : Сентябрь 06, 2010, 10:02 »

Напишите вирус, который встроиться в систему. Он будет выдавать логи по всем событиям системы. Отфильтруйте только, те которые говорят о завершении процесса. Першлите получившейся лог на сервер в Австралии. Сервер обработает лог, и скажет что случилось.
З.С. Пред пересылкой не забудте зашифровать лог.

в линуксе вирусы не работают  Смеющийся... ну по крайней мере здесь писать их неумею, да и не вижу смысла в таком процесе)))...
Все ето без проблем можно контролировать QProcess ом, но пока не разобрался как  Подмигивающий... Я им както запускал процесы но както каряво))), так и не разобрался что к чему Улыбающийся
Записан
ysfox
Гость
« Ответ #11 : Сентябрь 06, 2010, 10:04 »

Ещё можно перехватывать потоки ввода-вывода и мониторить их на предмет нужных сообщений.
если надо - где-то я уже приводил как это делать....

Ето выход из проблемы... но пока не встречал как ето делать... был бы очень благодарен если сможеш скинуть пример Улыбающийся
Записан
TheMixa
Гость
« Ответ #12 : Сентябрь 06, 2010, 10:46 »

QProcess::execute()
QProcess::readAllStandardError ()
QProcess::readAllStandardOutput ()
Записан
ysfox
Гость
« Ответ #13 : Сентябрь 06, 2010, 11:31 »

QProcess::execute()
QProcess::readAllStandardError ()
QProcess::readAllStandardOutput ()


я делал так:
Код:
                       QProcess *proc = new QProcess();
                            proc->start(File_Name);
                            if (proc->Starting)
                              {
                                  proc->setProcessChannelMode( QProcess::MergedChannels );
                                  proc->setReadChannel(QProcess::StandardError);
                                  if (proc->Running) { proc->waitForReadyRead(30000);};
                              };
                            proc->close();
                            delete proc;
и если запутить таких 3 процеса подряд один за одним тогда 1й запускается, он ещо в работе а уже запустился 2й и так дальше - они не ждут завершения предыдущего процеса...
думаю что тоже самое будет и с вашым кодом, хотя не уверен... щас попробую Улыбающийся
Записан
TheMixa
Гость
« Ответ #14 : Сентябрь 06, 2010, 11:44 »

Цитировать
int QProcess::execute ( const QString & program, const QStringList & arguments )   [static]
Starts the program program with the arguments arguments in a new process, waits for it to finish, and then returns the exit code of the process. Any data the new process writes to the console is forwarded to the calling process.

The environment and working directory are inherited by the calling process.

On Windows, arguments that contain spaces are wrapped in quotes.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 23.