QString --> octal

Alles rund um die Programmierung mit Qt
madmadmod
Beiträge: 11
Registriert: 5. Juni 2006 09:47

QString --> octal

Beitrag von madmadmod »

Hallo

Ich schreibe hier in der Hoffnung, dass mir 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.

OS: Fedora Core 5
Dev: QT 3.3

Wenn jemand einen Tipp für mich hat, dann wäre ich echt dankbar!

Gruss
madmadmod
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Re: QString --> octal

Beitrag von patrik08 »

madmadmod hat geschrieben:Hallo

Ich schreibe hier in der Hoffnung, dass mir 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
z.B. aus 0755 wird dann 755.
Gruss
madmadmod
Du denkst einfach mit linux/mac .... und nicht mit allen os....
wenn du mit http://doc.trolltech.com/4.1/qdir.html#mkdir deine ordner anlegst...

Musst du nor noch mit ... hinterher laufen mit
#if defined Q_WS_X11
#if defined Q_WS_MAC
..... mit qprocess den richtigen chmod / chown uebergeben..
mit window nicht noetig da alles 0777 ist... :lol:

mit qprocess geht ein
#define chownfull 0777
nicht verloren ... eben getestet...
Zuletzt geändert von patrik08 am 5. Juni 2006 10:31, insgesamt 1-mal geändert.
madmadmod
Beiträge: 11
Registriert: 5. Juni 2006 09:47

Beitrag von madmadmod »

danke für die antwort.

das ist sicher richtig, jedoch ist es imho die bessere lösung diese funktionien direkt zu implenetieren, als externe programme aufzurufen...
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

dann schreibe dir eine liste...

probiere...
#define octalfull 0777

der wert kann dir niemand aendern....
madmadmod
Beiträge: 11
Registriert: 5. Juni 2006 09:47

Beitrag von madmadmod »

habe auch schon daran gedacht :D

allerdings gibt es dabei sehr viele möglichkeiten (rwxrwxrwx = 9 Bits = 1024 Möglichkeiten) :?

hm...
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

was schreibs du denn ein mailserver oder webserver...
wenn der benutzer schreibt sind die ordner sowieso seine...

ausser du schreibst eben ein server ..... der als user , nobody , oder root lauft...

lese auch ... http://www.qtcentre.org/forum/showthrea ... ight=octal
madmadmod
Beiträge: 11
Registriert: 5. Juni 2006 09:47

Beitrag von madmadmod »

ich schreibe ein image-tool. also ein tool um abbilder von ext2/ext3 datenträgern zu machen, dabei können dateien excluded, verschlüsselt und kopmprimiert werden.

habe mich jetzt übrigens doch für qprocess entschieden, ist gar ned so langsam wie ich dachte. und vor allem EINFACH ZU IMPLEMENTIEREN!!!!
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

madmadmod hat geschrieben:ich schreibe ein image-tool. also ein tool um abbilder von ext2/ext3 datenträgern zu machen, dabei können dateien excluded, verschlüsselt und kopmprimiert werden.
Dann kannst du praktisch nur ueber qprocess gehen... (ausser du schreibst dd neu!)
dd ist wohl auf jedem linux drauf....

http://linux.about.com/od/commands/l/blcmdl1_dd.htm
qprocess lese auch http://www.qtforum.de/forum/viewtopic.p ... t=qprocess
madmadmod
Beiträge: 11
Registriert: 5. Juni 2006 09:47

Beitrag von madmadmod »

dd eignet sich eigentlich nur für dumps. filebasiert muss eben jedes file einzeln geöffnet werden.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Schonmal in die Doku geschaut?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
madmadmod
Beiträge: 11
Registriert: 5. Juni 2006 09:47

Beitrag von madmadmod »

also wenn ich das so mache:

Code: Alles auswählen

void cfileoperation::createdir(QString dirname, QString r)
{
    r.prepend("0");
    bool ok;
    cout<<r<<endl;
    cout<<r.toULong(&ok,10)<<endl;
;}
bekomme ich trotzdem 755 und nicht 0755 nach dem konvertieren. mache ich was falsch?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Mist, habe auf das falsche verlinkt (sollte setNum() sein, aber das brauchst Du ja nicht wie ichsehe)
Du hast es schon als String - also einfach ausgeben -> r.toLatin1()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
madmadmod
Beiträge: 11
Registriert: 5. Juni 2006 09:47

Beitrag von madmadmod »

wie gesagt, strings werden nicht akzeptiert. auch nicht als latin1() formatiert...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

madmadmod hat geschrieben:wie gesagt, strings werden nicht akzeptiert. auch nicht als latin1() formatiert...
Wieso sollte das nicht funktionieren? Beschwert sich der Compiler? Sehe keinen Grund warum esnicht gehen sollte.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
madmadmod
Beiträge: 11
Registriert: 5. Juni 2006 09:47

Beitrag von madmadmod »

mode_t ist eben mode_t und nicht QString.

Code: Alles auswählen

cfileoperation.cpp: In member function »void cfileoperation::createdir(QString, QString)«:
cfileoperation.cpp:99: Fehler: ungültige Umwandlung von »const char*« in »__mode_t«
cfileoperation.cpp:99: Fehler:   Argument 2 von »int mkdir(const char*, __mode_t)« wird initialisiert
Antworten