Seite 1 von 2

QString --> octal

Verfasst: 5. Juni 2006 09:50
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

Re: QString --> octal

Verfasst: 5. Juni 2006 10:21
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...

Verfasst: 5. Juni 2006 10:31
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...

Verfasst: 5. Juni 2006 10:34
von patrik08
dann schreibe dir eine liste...

probiere...
#define octalfull 0777

der wert kann dir niemand aendern....

Verfasst: 5. Juni 2006 10:51
von madmadmod
habe auch schon daran gedacht :D

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

hm...

Verfasst: 5. Juni 2006 11:03
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

Verfasst: 5. Juni 2006 11:08
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!!!!

Verfasst: 5. Juni 2006 11:39
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

Verfasst: 5. Juni 2006 11:54
von madmadmod
dd eignet sich eigentlich nur für dumps. filebasiert muss eben jedes file einzeln geöffnet werden.

Verfasst: 5. Juni 2006 15:16
von Christian81
Schonmal in die Doku geschaut?

Verfasst: 5. Juni 2006 15:35
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?

Verfasst: 5. Juni 2006 15:53
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()

Verfasst: 5. Juni 2006 16:01
von madmadmod
wie gesagt, strings werden nicht akzeptiert. auch nicht als latin1() formatiert...

Verfasst: 5. Juni 2006 16:05
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.

Verfasst: 5. Juni 2006 16:17
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