Qprocess i kopiowanie plików

0

Hej,

Mam problem podczas pisania programu z biblioteką QProcess. Otóż za pomocą QFileDialog wybieram dowolny plik w systemie i przetrzymuję jego ścieżkę w zmiennej plik. Następnie chcę ten plik skopiować do domyślnej lokalizacji, gdzie znajduje się program.
Niestety program tego nie robi i nie mogę dojść do tego dlaczego. Dodam, że komenda, którą generuję po przeklejeniu do cmd działa i kopiuje plik.

Kod:

QString plik = QFileDialog::getOpenFileName(
            this,
            tr("Open File"),
            QCoreApplication::applicationDirPath(),
            "Text File (*.txt);;Word document(*.doc);;Excel Document(*.xls);;Writer Document(*.odt);;Calc Document(*.ods);;PDF(*.pdf);;JPG(*.JPG);;PNG(*.PNG);;"
            );

QProcess *komenda = new QProcess(this);
QString StringKomenda;

#if defined _WIN32
StringKomenda += "copy ";
#else
StringKomenda += "cp ";
#endif
StringKomenda +='"'+ plik + '"' + ' ' + '"' + QCoreApplication::applicationDirPath() + '/img"';
qDebug() << StringKomenda;
komenda->execute(StringKomenda);

1

Polecam QFile::copy(): http://doc-snapshot.qt-project.org/qt5-5.4/qfile.html#copy-2

Na linuksie zapewne działa. Na windowsie, copy nie jest programem tylko komendą zaimplementowaną bezpośrednio w cmd.exe, więc musiałbyś odpalić dodać cmd /C na początku StringKomenda.

0

Hmm, zrobiłem coś takiego, ale to niestety nadal nie kopiuje pliku...

void okno_dodWpis::on_pushButton_clicked()
{
QString plik = QFileDialog::getOpenFileName(
this,
tr("Open File"),
QCoreApplication::applicationDirPath(),
"Text File (.txt);;Word document(.doc);;Excel Document(.xls);;Writer Document(.odt);;Calc Document(.ods);;PDF(.pdf);;JPG(.JPG);;PNG(.PNG);;"
);

// QProcess *komenda = new QProcess(this);
// QString StringKomenda;
//#if defined _WIN32
// StringKomenda += "copy ";
//#else
// StringKomenda += "cp ";
//#endif

  • *StringKomenda +='"'+ plik + '"' + ' ' + '"' + QCoreApplication::applicationDirPath() + '/img"';
  • *qDebug() << StringKomenda;
    qDebug() << QCoreApplication::applicationDirPath() + "/img";
    QFile::copy(plik, QCoreApplication::applicationDirPath() + "/img");
    }
1

QFile::copy przyjmuje dwie nazwy pliku, a Ty prawdopodobnie podajesz nazwę katalogu jako drugi argument.

0

Ok działa, dzięki, wątek do amknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0