Seite 1 von 1
Problem mit QIODevice
Verfasst: 4. September 2009 09:46
von Domar
Hallo!
Ich hab da ein kleines Problem mit dem speichern von Files unter Qt...
aber erstmal der Code:
Code: Alles auswählen
QIODevice *file = KFilterDev::deviceForFile(path, KMimeType::findByFileContent(path)->name());
if(!file->open(QIODevice::WriteOnly))
{ //Hier geht er leider rein!
if(!file)
{ //Hier nicht!
return false;
}
return false;
}
QTextStream ts(file);
ts.setCodec("UTF-8");
ts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
ts << doc->toString();
emit(written());
file->close();
return true;
Schluss mit lustig ist dann in der Zeile 2, weil bei file->open(QIODevice::WriteOnly) leider false raus kommt.
Kann mir bitte wer sagen, was daran Schuld sein könnte?
Ich kenn mich leider überhaupt nicht aus bei diesen Sachen.
mfg Domar
Verfasst: 4. September 2009 09:51
von Mani99
Bist du sicher das du weißt, was du da machst?
Hast du dir die doku dazu schon einmal angesehen?
Code: Alles auswählen
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream out(&file);
out << "Test1" << "Test2" << "\n";
Verfasst: 4. September 2009 10:36
von Domar
Danke für deine schnelle Antwort!
Ich hab das mal so gemacht, wie du geschrieben hast.
Also eine QFile erstellt, diese dann überprüft und wieder returned er
Welche Dokumentation meinst du? Ich hab leider noch keine gute gefunden!
mfg Domar
Verfasst: 4. September 2009 10:38
von Exasperation
Domar hat geschrieben:
Welche Dokumentation meinst du? Ich hab leider noch keine gute gefunden!
Naja wenn man von der Doku spricht meint man immer DIE Doku
Hier steht eigentlich alles drin was man wissen muss.
Offizielle Qt 4.5 Doku
Verfasst: 4. September 2009 10:39
von Mani99
Poste nochmal deinen veränderten code und wir gehen das schritt für schritt durch. Je mehr code du postest, des besser kann man dir helfen!
Und die doku findest du
hier!
Verfasst: 4. September 2009 10:57
von archer
Liegt es vielleicht an irgendwelchen Benutzerrechten, das das IODevice nicht im Schreibmodus geöffnet werden kann?
Das if (!file) ist an der Stelle überflüssig. Es macht keinen Sinn erst auf file zuzugreifen und dann zu prüfen ob file überhaupt existiert.
Verfasst: 4. September 2009 11:11
von Domar
Danke, dass ihr mir so gut zur Seite steht!
Das if (!file) ist an der Stelle überflüssig. Es macht keinen Sinn erst auf file zuzugreifen und dann zu prüfen ob file überhaupt existiert.[/quote]
Dessen bin ich mir bewusst, das war vorher in einer if mit | verknüpft, ich habs aber zum debuggen auseinandergetrennt. Aber danke für die Erinnerung!
Code: Alles auswählen
QIODevice *file = KFilterDev::deviceForFile(path,"text/plain");
qDebug() << "nach QIODevice";
if(!file->open(QIODevice::WriteOnly))
{
qDebug() << "file->open(...)" << file->errorString();
return false;
}
QTextStream ts(file);
ts.setCodec("UTF-8");
ts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
ts << doc->toString();
emit(written());
file->close();
return true;
Ich habs jetzt fasst! file->errorString() gibt mir "No such file or directory zurück"^^
Wie kann ich diese File nun zuerst mal erstellen?
mfg Domar
Verfasst: 4. September 2009 11:24
von Mani99
Was machst du immer mit
Code: Alles auswählen
QIODevice *file = KFilterDev::deviceForFile(path,"text/plain");
???
Verfasst: 4. September 2009 11:31
von Domar
Mani99 hat geschrieben:Was machst du immer mit
Code: Alles auswählen
QIODevice *file = KFilterDev::deviceForFile(path,"text/plain");
???
Da das mit QFile auch nicht hingehaut hat, hab ich wieder zurückgewechselt. KFilterDev::deviceForFile(path,"text/plain") returned mir ja ein QIODevice, auf dem ich dann schreiben und lesen kann, oder?
Die Frage ist nur noch, warum die File nicht automatisch erstellt wird, wenn sich nicht vorhanden ist, bzw wie man sie erstellen kann.
lg Domar
Verfasst: 4. September 2009 11:39
von Mani99
Hast du überhaupt schreibrechte, dort wo du das file erstellen willst?
Nimm wieder QFile anstelle des QIODevices von den KDE libs.
Verfasst: 4. September 2009 11:45
von Domar
Ok, mach ich!
Schreibrechte sollte ich in meinem Home Verzeichnis auf alle Fälle haben, oder?
Wenn ich die File von Hand erstelle, schreibt mein Programm den gewünschten Text dort auch hinein, aber wenn die File nicht existiert, macht er gar nix...
Verfasst: 4. September 2009 11:54
von Curtis Newton
Domar hat geschrieben:Ok, mach ich!
Schreibrechte sollte ich in meinem Home Verzeichnis auf alle Fälle haben, oder?
Wenn ich die File von Hand erstelle, schreibt mein Programm den gewünschten Text dort auch hinein, aber wenn die File nicht existiert, macht er gar nix...
Ich kenne mich mit KFilterDevs nicht aus, aber "text/plain" sind ja eine Datei (plain) und ein Verzeichnis (text). Gibts es überhaupt dieses Verzeichnis? Oder was soll das sein?
C.
Verfasst: 4. September 2009 11:55
von Mani99
Also eigentlich müsste das file erstellt werden, poste doch mal deinen code!
Verfasst: 4. September 2009 12:09
von Domar
"text/plain" heißt, das der Inhalt der File Text ohne Formatierung ist.
Nochmal der Code:
Code: Alles auswählen
QFile file("/home/domar/domarstest.xml");
if(!file->open(QIODevice::WriteOnly))
{
return false;
}
QTextStream ts(file);
ts.setCodec("UTF-8");
ts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
ts << doc->toString();
emit(written());
file->close();
return true;
Verfasst: 4. September 2009 12:55
von Mani99
Kompiliert dein source überhaupt? Ich kanns mir nicht vorstellen...
Code: Alles auswählen
QFile file("/home/domar/domarstest.xml");
if(!file->open(QIODevice::WriteOnly))
{
return false;
}
Du greifst bei der if abfrage auf einen pointer namens "file" zu, welcher aber hier nicht erstellt wurde!