Hallo!
Da ich noch nicht so ganz firm in Sachen C/C++ bin habe ich mal wieder eine
Frage.
Ich versuche gerade folgende Funktion in C nach C++ zu übersetzen in
Verbindung mit QT-Klassen.
char* mk_recurse_dir(char *dir) {
// this will create a directory by that name, then make an file inside
that dir.
int x;
char *out_name;
if (D_MKDIR (dir)) {
if (errno != EEXIST) { // not an error because it exists
x = errno;
DIE(("mk_recurse_dir: Cannot create directory %s: %s\n", dir,
strerror(x)));
}
}
if (chdir (dir)) {
x = errno;
DIE(("mk_recurse_dir: Cannot change to directory %s: %s\n", dir,
strerror(x)));
}
out_name = malloc(strlen("config")+1);
strcpy(out_name, "config");
return out_name;
}
Jetzt habe ich mich durch die QT Doku gewühlt und bin zu diesem Ergebnis
gekommen:
#include
Frank Liebelt wrote:
Zeile 54 ist: out_name = malloc(strlen("config")+1);
Wäre nett wenn mir da jemand helfen könnte.
malloc liefert einen Void* zurück und ist c ;) nimm new und delete bei c++, also char * out_name = new char [strlen +1]; alternativ: string aus der STL oder bei der Verwendung von Qt QString. Die QString- Doku müsste Dich auch bei den Warnings weiterbringen, denn qwarning erwartet IIRC einen QString. Gruss Andreas
Hi!
alternativ: string aus der STL oder bei der Verwendung von Qt QString. Die QString- Doku müsste Dich auch bei den Warnings weiterbringen, denn qwarning erwartet IIRC einen QString.
Danke für Deine Hilfe. Ich habe jetzt mal nachgelesen wie das denn geht mit QString und den Warnings. Das funktioniert wunderbar. QString warning; warning = QString( "Error: cannot change to directory % 1" ) .arg(dirname); QMessageBox::critical (0,"Application - Error",warning); Ich habe strerror mal entfernt um error.h nicht includieren zu müssen. Ich will ja von C weg. Da ich irgendwie nichts in der QT Bibliothek gefunden habe, ausser QErrorMessage mit der ich nicht anfangen kann, würde mich mal interesieren wie ich Fehler abfangen bzw auswerten kann. if (!directory->exists(dirname)) gibt ja true oder false zurück. Die Frage ist nur wie bekomme ich den Fehlercode ausgelesen? Wenn es denn einen gibt. Am Ende soll es dann so ausehen: Error cannot change to directory (testdir) : 995 Wobei 995 jetzt ein pseudo Fehlercode ist. Gruß Frank Frank
Frank Liebelt wrote:
Ich habe jetzt mal nachgelesen wie das denn geht mit QString und den Warnings.
Das funktioniert wunderbar.
schön :) und das beste ist, das klappt dann problemlos Systemübergreifend...
if (!directory->exists(dirname)) gibt ja true oder false zurück. Die Frage ist nur wie bekomme ich den Fehlercode ausgelesen? Wenn es denn einen gibt.
einen Fehlercode gibts hier (IIRC) a priori nicht, den kannst Du Dir natürlich selber basteln...
Am Ende soll es dann so ausehen:
Error cannot change to directory (testdir) : 995 Wobei 995 jetzt ein pseudo Fehlercode ist.
so dann würde ich mir erst mal eine Fehlerklasse basteln (kann man ja wunderbar in eine Lib auslagern), die entsprechendes codiert, dann eine Hilfsklasse zur überprüfung der Zieldatei/Verzeichnis, hier kann man dann mit QFileInfo alles mögliche auslesen (existiert, Schreibberechtigung, GruppenID, etc) in der Klasse machst Du dann z.B. eine Funktion: class FileCheck { static void check(const QString filename) throw (Errorliste); }; void FileCheck::static check(const QString filename) thoow (Errorliste...) { QFileInfo fi; ... if (fi.exist()) throw Existiert...; if (fi->...()) throw anderen Error.... } und den Aufruf packst Du ein einen try-catch-block. so als Spontane Idee... Andreas
participants (2)
-
Andreas Loesch
-
Frank Liebelt