int <--> octal bin am verzweifeln
-
Hallo
Ich schreibe hier in der Hoffnung, dass mit jemand helfen kann, bin echt am verzweifeln...
Ich versuche mit Hilfe von
#include <sys/stat.h>
#include <sys/types.h>int mkdir(const char *pathname, mode_t mode);
verzeichnisse zu erstellen. Das funktioniert auch wunderbar, solange ich die Rechte (mode_t) hardcoded übergebe. Jedoch wird in meinem Programm dieser Wert als QString übergeben und ein casten in int lässt dann auch das führende 0 verschwinden. Ohne führendes 0 wird aber der Wert falsch intepretiert.
z.B. aus 0755 wird dann 755.
Strings werden natürlich als Parameter nicht akzeptiert.
Wenn jemand einen Tipp für mich hat, dann wäre ich echt dankbar!
Gruss
madmadmodAch ja, ganz vergessen:
OS: Fedora Core 5
Dev: QT 3.3
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum Andere GUIs - Qt, GTK+, wxWidgets in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
madmadmod schrieb:
Hallo
Ich schreibe hier in der Hoffnung, dass mit jemand helfen kann, bin echt am verzweifeln...
Ich versuche mit Hilfe von
#include <sys/stat.h>
#include <sys/types.h>int mkdir(const char *pathname, mode_t mode);
verzeichnisse zu erstellen. Das funktioniert auch wunderbar, solange ich die Rechte (mode_t) hardcoded übergebe. Jedoch wird in meinem Programm dieser Wert als QString übergeben und ein casten in int lässt dann auch das führende 0 verschwinden. Ohne führendes 0 wird aber der Wert falsch intepretiert.
z.B. aus 0755 wird dann 755.
Strings werden natürlich als Parameter nicht akzeptiert.
Wenn jemand einen Tipp für mich hat, dann wäre ich echt dankbar!
Wie wäre es mit Handarbeit?
Lass das ganze überflüssige hin- und herkonvertieren sein und garantiere, dass der String immer nach "0755" aufgebaut ist (also "0" gefolgt von drei Zahlen von 0-7).
Da ich den QString nicht exakt kenne, nehme ich vorsichtshalber einen char *, die Verwendung ist vermutlich gleichwertig.
int StrToMode( char * string ) { if( string[0] == '0' ) { int result = 0; for( int i = 1; i <= 3; i++ ) if( string[i] >= '0' && string[i] <= '7' ) result = result << 3 + string[i] - '0'; else return -1; return result; } return -1; }
Keine Ahnung, ob's funktioniert, ich habe es nur mal so daher getippert. Die ersten 4 Ziffern werden interpretiert, alles nachfolgende ignoriert. Sind die Ziffern nicht im gewünschten Format, wirft die Funktion -1 zurück. Solltest Du also was positives haben, sollte mkdir das schlucken.
have phun
Edit: Mit CodeFlags sieht's hübscher aus... :-\
Edit^2: Gna... aus i < 3 wird i <= 3 in der for-Bedingung.