Files speichern



  • Hallo!

    Ich hab da ein kleines Problem mit dem speichern von Files unter Qt...
    aber erstmal der Code:

    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



  • Deinen Kommentaren trau ich nicht. Wie hast du das überprüft?!?
    Denn wenn !file == true, bedeutet das eigentlich, dass in Zeile 2 (file->open) ein SegFault entstehen müsste (NULL-Pointer und so!)

    Dass open() false zurückliefert liegt in deinem Falle vllt. an mangelnden Schreibrechten. Was steht denn in path?
    Mit der bisherigen Info kann man dir leider noch nicht wirklich weiter helfen.



  • Ich habe überprüft, ob file->open(...) false returned und das ist der Fall.

    Was kann ich gegen diese "mangelnden Schreibrechte" machen?



  • Domar schrieb:

    Ich habe überprüft, ob file->open(...) false returned und das ist der Fall.

    Das ist ja OK, aber das Zweite (file == NULL) bezweifel ich!

    Was kann ich gegen diese "mangelnden Schreibrechte" machen?

    Eigentlich gar nix. Das sind dann Rechte, die das Betriebssystem dem Benutzer nicht zugesteht.
    Du könntest jetzt einfach mal sagen, was in "path" steht, also welche Datei du unbedingt zum Schreiben öffnen willst. Dann könntest du auch mal selber versuchen, diese Datei mit einem anderen Programm (z.B. Texteditor) zu beschreiben.

    Im übrigen interessiert dich auch brennend file->errorString(), und uns auch, wenn du schon nen Fehler bekommst.



  • Danke für die schnelle Antwort!

    Du könntest jetzt einfach mal sagen, was in "path" steht, also welche Datei du unbedingt zum Schreiben öffnen willst.

    Da hab ich jetzt zu Testzwecken mal "/home/domar/test.xml" drinnen stehen.

    Dann könntest du auch mal selber versuchen, diese Datei mit einem anderen Programm (z.B. Texteditor) zu beschreiben.

    Ich muss die file ja erst mal erstellen können 😉

    Im übrigen interessiert dich auch brennend file->errorString(), und uns auch, wenn du schon nen Fehler bekommst.

    Das war glaub ich der entscheidende Hinweis! "No such file or directory" - sprich ich muss die File mal erstellen, aber wie geh ich das am besten an?
    ...tut mir leid, ich kenn mich echt nicht aus 😞

    mfg Domar



  • Also, laut Doku soll QFile::open() die Datei erstellen, falls sie nicht existiert und man die Datei auch erstellen kann.
    Warum verwendest du eigentlich KFilterDev? Schau mal da in der Doku nach, ob du irgendwelche Hinweise finden kannst. Denn QIODevice != QFile, es kann sein dass was anderes zurückkommt und da eben nicht versucht wird die Datei zu erstellen.



  • Darum hab ichs auch mal mit QFile versucht, leider auch vergebens.

    Bin echt schön langsam am verzweifeln 😞



  • Domar schrieb:

    Darum hab ichs auch mal mit QFile versucht, leider auch vergebens.

    Du bist auch sicher als User domar eingeloggt, und dein home ist "/home/domar"?
    Denn ich hab hier absolut gar keine solchen Probleme!
    Welche Qt-Version verwendest du denn? Was passiert wenn die Datei schon existiert?

    Zeig doch auch mal bitte den Code mit nur QFile, der bei dir auch nicht funktioniert.


Log in to reply