Innerhalb QT .exe mit Argumenten Ausfuehren
-
QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt"); QFile::remove(work_path+"/File.txt");
Nur das (kein
QProcess
) funktioniert nicht? Wie wissen Sie das? WeilFile.txt
existiert immernoch, auch nachdem Sie Ihr Programm beendet haben?QFile::remove()
gibt einen Wert zurück:qDebug() << QFile::remove(work_path+"/File.txt");
-
@JonB
so sieht es nun aus:Erster Schritt: beim/nach dem Laden des .bmp Pictures wird nachfolgendes ausgefuehrt:
QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/Compiler.exe"); QProcess proc; proc.start(work_path+"/Compiler.exe", { work_path+"/SourceLogo.bmp", work_path+"/SourceLogo.bin", "-b", "-c" } ); qDebug() << proc.waitForFinished(); qDebug() << proc.readAllStandardOutput(); qDebug() << proc.readAllStandardError(); proc.close(); //This should be removed, the file should be loaded directly without Dialog. logo_binary = QFileDialog::getOpenFileName(this, work_path+"/SourceLogo.bin");
Danach wird per Save Button die Neue Datei gespeichert, und nachfolgend das ausgefuehrt:
QFile::remove(work_path+"/SourceLogo.bin"); QFile::remove(work_path+"/SourceLogo.bmp"); qDebug() << QFile::remove(work_path+"/Compiler.exe");
-
@NeueKlasse
Das ist viel zu kompliziert und beantwortet meine Fragen nicht! Ich weiss nicht was funktioniert und was funkioniert nicht....QFile::remove(work_path+"/SourceLogo.bin"); // funktioniert ja oder nein? QFile::remove(work_path+"/SourceLogo.bmp"); // funktioniert ja oder nein? qDebug() << QFile::remove(work_path+"/Compiler.exe"); // muesst wissen was der `qDebug()` ausgibt?!
Danach:
QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt");
QFile::remove(work_path+"/File.txt");
Nur das (kein
QProcess
) funktioniert nicht? Wie wissen Sie das? WeilFile.txt
existiert immernoch, auch nachdem Sie Ihr Programm beendet haben? -
QFile::remove(work_path+"/SourceLogo.bin"); // funktioniert!
QFile::remove(work_path+"/SourceLogo.bmp"); // funktioniert!
qDebug() << QFile::remove(work_path+"/Compiler.exe"); // qDebug gibt aus: falseQFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt"); QFile::remove(work_path+"/File.txt"); Nur das (kein QProcess) funktioniert nicht? Wie wissen Sie das? Weil File.txt existiert immernoch, auch nachdem Sie Ihr Programm beendet haben?
Ich sehe im Dateibrowser das die Dateien dementsprechend erzeugt und geloescht werden => QProcess arbeitet wie es soll, die hier stehende "File.txt" heisst bei mir: "Compiler.exe", und diese wird wiegesagt nicht gelöscht
-
@NeueKlasse
Denken Sie daran, dass mein Deutsch nicht so gut ist :)Ich weiss ihrer Datei ist
.exe
genannt. Aber das kann zu Problemen führen. Ich habe bewusst darum gebeten, das zu verwenden, genau was ich geschrieben habe:QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt"); QFile::remove(work_path+"/File.txt");
.txt
nicht.exe
! (Und keinQProcess
während wir das testen.) Bitte. -
@NeueKlasse
Mir ist noch ein anderer Gedanke gekommen, ich kann vielleicht erraten, wo das Problem liegt... :)Qt "Resource" Datei (
:/rec/...
) ist "read-only". MitQFile::copy()
möglicherweise bleibt die kopierte Datei schreibgeschützt. Ich selbst verwende Linux, nicht Windows. Aber ich glaube, das mit WindowsQFile::remove()
kann ein "readonly" Datei nicht löschen.QFile::copy(":/rec/Software/bmp2c-escher3d.exe", work_path+"/File.txt"); QFile::setPermissions(work_path+"/File.txt", QFile::ReadOther | QFile::WriteOther); // Dieses! QFile::remove(work_path+"/File.txt");
?
-
Das war die Loesung!, setPermissions.... (.txt file konnte zuvor ebenfalls nicht geloescht werden...)
Danke!gibt es hier noch eine andere Moeglichkeit ein File zu laden?
ich moechte keinen Dialog mehr, aber dennoch das Datei format beibehalten (String)//logo_binary (String) gets filled with the File/Name logo_binary = QFileDialog::getOpenFileName(this, work_path+"/SourceLogo.bin"); //this example creates a new QFile named logo_binary => not ok QFile logo_binary(work_path+"/SourceLogo.bin");
-
@NeueKlasse said in Innerhalb QT .exe mit Argumenten Ausfuehren:
setPermissions....
Ja, nur under Windows, unter Linux nicht notwendig.
ich moechte keinen Dialog mehr, aber dennoch das Datei format beibehalten (String)
QFileDialog::getOpenFileName()
ist nur dann der Fall, wenn Sie den Benutzer nach einem Dateinamen fragen möchten.
Wenn Sie bereits wissen, welches Pathanem Sie verwenden möchten, verwenden Sie es einfach. Bereits haben Sie:QFile logo_binary(work_path+"/SourceLogo.bin");
Das stimmt. Also verstehe ich nicht warum "not ok"? Wenn
QFileDialog::getOpenFileName()
gibtwork_path+"/SourceLogo.bin"
zurück dann ist das das selbe wieQFile logo_binary(work_path+"/SourceLogo.bin");
ohnegetOpenFilename()
. "das Datei format beibehalten" ist nicht relevant. -
@JonB
ich muss hier leider einen Screenshot einfuegen damit man sieht was ich meine:logo_binary ist in der ersten Zeile ein QString => Orange Farbe
und in der zweiten Zeile ein QFile => Dunkel Blaue Farbeim moment ist es so das es NUR ueber den QFileDialog funktioniert, ansonsten:
QFSFileEngine::open: No file name specifieddas File wird im QString Format hier weiterverwendet:
QFile *file = new QFile(logo_binary, NULL); file->open(QIODevice::ReadOnly);
-
Christian Ehrlicher Lifetime Qt Championreplied to NeueKlasse on last edited by Christian Ehrlicher
Ich verstehe das Problem nicht. Übergib dem QFile Konstruktor einfach den zusammengesetzten string so wie du ihn auch an QProcess übergibst. Wo ist da das Problem? Und QFile muss nicht auf den heap angelegt werden. Einfach auf den Stack und gut ists.
-
ich verstehe nicht ganz auf was du hinaus moechtest, wie bereits oben beschrieben erzeugt
QFile logo_binary("mein Pfad");
eine QFile Variable.
ich brauche aber eine QString Variable, sieheQString logo_binary . . . . logo_binary = QFileDialog:getOpenFileName("mein Pfad");
-
QString logo_binary = "Mein Pfad" 🙄
-
This post is deleted!
-
Habe es auch so versucht ohne Aenderung,
hat allerdings gerade geklickt..ich verarbeite das File (..den Pfad) danach folgendermassen weiter:
QFile *file = new QFile(logo_binary, NULL); file->open(QIODevice::ReadOnly);
Also mache ich doch gleich die Vereinfachung hier: (ohne zusaetzlichen Befehl)...
QFile *file = new QFile(work_path+"/SourceLogo.bin", NULL); file->open(QIODevice::ReadOnly);
und funktioniert. Aufjedenfall Danke!