Seite 1 von 2

Qt 4.3 Konsole verstecken

Verfasst: 25. Januar 2008 10:44
von PoD GamefreakF
Hallo jung,
ich habe in meinem programm ein paar cmd aufrufe, mit der funktion "system(Variable)". Wie kann ich das cmd fenster das sich bei dieser funktion öffnet verstecken/nicht anzeigen lassen.

Verfasst: 25. Januar 2008 11:07
von macman
In dem Du QProcess nutzt.

Verfasst: 25. Januar 2008 13:55
von PoD GamefreakF
jo danke für den tipp,ich hab zwar die doku angschaut, aber irgendwie werde ich nicht schlauer daraus. Könntest du mal ein kleines beispiel machen.
z.B. copy c:/nase.jpg d:/nase.jpg.
kopiert in cmd das das bild nase von c:/ nach d:/

Verfasst: 25. Januar 2008 14:41
von dontinelli
Ich kenne cmd zwar nicht, das wird aber wohl so gehen:

Code: Alles auswählen

QProcess *p = new QProcess(this);
p->start("cmd");
p->write("copy c:/nase.jpg d:/nase.jpg");
p->closeWriteChannel();
if (!p->waitForFinished()) return false;
QByteArray result = p->readAll();
Bei "start" kannst du als zweites Argument noch eine Stringliste von Argumenten mitgeben, vielleicht kannst du den copy-Befehl auch schon dort übergeben. Wie gesagt, ich kenne cmd nicht.
CHeers
DonTinelli

PS steht übrigens alles so in der Doku von QProcess!

Verfasst: 30. Januar 2008 13:12
von PoD GamefreakF
ich habe so die funktion in mein programm geschrieben, aber sie kopiert kein bild von C:/ nach D:/

Verfasst: 30. Januar 2008 13:21
von franzf
Eigentlich solltest du das "cmd" nicht brauchen (oder brauchst du unter Linux auch das "bash" als app-name? ;))

Code: Alles auswählen

QProcess process;
QStringList args;
args << "C:\nase.jpg" << "D:\nase.jpg";
process.start("copy", args);
sollte es also tun. Wenn natürlich in C:\ kein nase.jpg existiert wird auch der copy fehlschlagen!

Grüße
Franz

Verfasst: 30. Januar 2008 13:24
von Christian81
cmd.exe ist nötig da copy kein executable ist sondern ein Befehl von cmd.exe.
Abgesehen davon - warum einfach wenn es auch umständlich geht, oder warum benutzt man sonst copy zum kopieren von Dateien innerhalb von Qt?

Verfasst: 31. Januar 2008 09:48
von PoD GamefreakF

Code: Alles auswählen

QProcess process;
QStringList args;
args << xcopy << "C:\nase.jpg" << "D:\\";
int exitCode = process.execute("cmd", args);
So müsste es theoretisch gehen, oder?
Ich habe es ausprobiert und es bleibt beim execute befehl stehen, dass heisst es macht was. Leider geht es wie gesagt nicht weiter.

Verfasst: 31. Januar 2008 10:06
von Noci
wenn es wirklich daran liegt, dass xcopy auf eine Usereingabe wartet würde ich versuchen die Aufforderungen einfach zu unterdrücken

Code: Alles auswählen

xcopy /?  ->
/C        Setzt das Kopieren fort, auch wenn Fehler auftreten.
/R        Überschreibt schreibgeschützte Dateien.  ((wenn gewünscht sonst kommt wohl auch eine Rückfrage))
/Y        Unterdrückt die Aufforderung zur Bestätigung, dass eine
          vorhandene Zieldatei überschrieben werden soll.

/I        Falls Ziel nicht vorhanden ist und mehrere Dateien kopiert
          werden, nimmt XCOPY an, dass das Ziel ein Verzeichnis ist.
also eventuell mit

Code: Alles auswählen

args << xcopy << "/C" << "/R" << "/Y" << "C:\\nase.jpg" << "D:\\"; 
versuchen, reine Theorie xD

*edit
weiterer Versuch wäre dann noch die Fehlerausgabe in eine Datei umzuleiten um zu sehen was los ist.
Demnach args noch mit "2> D:\\test.txt" erweitern

Code: Alles auswählen

args << xcopy << "/C" << "/R" << "/Y" << "C:\\nase.jpg" << "D:\\" << "2> D:\\test.txt";

Verfasst: 31. Januar 2008 11:21
von PoD GamefreakF
wenn ich das so mache passiert nichts, aber ich bekomme den exit code 1 zurück. Wo kann ich den nachschauen was das zu bedeuten hat .

Verfasst: 31. Januar 2008 11:43
von Korgen
schonmal daran gedacht QFile::copy zu verwenden?

Verfasst: 31. Januar 2008 12:10
von Noci
Exit code - Description
0 - Files were copied without error.
1 - No files were found to copy.
2 - The user pressed CTRL+C to terminate xcopy.
4 - Initialization error occurred. There is not enough memory or disk space, or you entered an invalid drive name or invalid syntax on the command line.
5 - Disk write error occurred.

Verfasst: 31. Januar 2008 13:16
von PoD GamefreakF
Korgen hat geschrieben:schonmal daran gedacht QFile::copy zu verwenden?
1. ja klar habe ich schonmal daran gedacht, aber kannst du mir mal eine funktion posten die Verzeichnisse und deren unterverzeichnisse und deren unterverzeichtisse etc. wo anders hin kopiert.

2. Wollte ich wissen wie man mit QProcess die CMD bedienen kann.

Verfasst: 31. Januar 2008 15:22
von PoD GamefreakF
Ok alles klar. Es funzt

Verfasst: 31. Januar 2008 16:02
von macman
PoD GamefreakF hat geschrieben:aber kannst du mir mal eine funktion posten die Verzeichnisse und deren unterverzeichnisse und deren unterverzeichtisse etc. wo anders hin kopiert.
Ja. Mit Rekursionen bekommst Du noch öfter zu tun, da wäre das eine gute Übung gewesen :-)