Seite 1 von 1

Textdatei auslesen, bearbeiten, speichern...

Verfasst: 15. Juni 2007 10:54
von wojtek85
Hallo,
möchte gerne eine Textdatei einlesen, bearbeiten und anschließend abspeichern, nicht unbedingt überschreiben sondern als "Save As".

Datei einlesen und anzeigen klappt wunderbar:

Code: Alles auswählen

QString commentFile = QFileDialog::getOpenFileName(this, tr("Open"), "/", tr("Textdatei (*.txt)"));

    if (!commentFile.isEmpty())
    {
        QFile comment(commentFile);
        if (comment.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            QTextStream in(&comment);
            while (!in.atEnd())
            {
                QString line = in.readLine();
                commentsTextBox->append(line);  //commentstextbox ist ein Qtextedit
            }
        }
     }
Bearbeiten kann man das Ding ja im QTextEdit automatisch, allerdings haperts bei mir beim speichern. Hatte mir überlegt das er eine neue QFile anlegt, da mit QTextStream out(...) das zeilenweise wieder auslese und in der Datei speichere. Aber irgendwie krieg ich das nicht hin... bin ich auf dem falschen Pfad oder hat jmd. einen Tipp?? Es sei darauf hingewiesen dass ich das nicht in einer Funktion machen will, sondern als seperate Funktion.

Danke. Mfg, Wojtek (qt4-Anfänger :lol: )

Verfasst: 15. Juni 2007 11:05
von Christian81
Und wo genau ist das Problem? Den Code liefern wir Dir nicht, aber deinen können wir uns gern anschauen. Die Doku zu QTextStream & QFile enthält imo schon ein Beispiel dazu.

Verfasst: 15. Juni 2007 11:13
von wojtek85

Code: Alles auswählen

void MainWindow::saveComment()
{
    QFile newComment("comment.txt");
    if(newComment.open(QIODevice::WriteOnly  | QIODevice::Text))
    {
        QTextStream out(&newComment);
        out << "test" << endl;
        newComment.close();
    }

    QFileDialog saveCommentDialog;
    newComment = saveCommentDialog.getSaveFileName(this, tr("Save"), "/", tr("Textdatei (*.txt)"));
}
Hier ist mein Code zum Speichern. Allerdings kriege ich da ne Fehlermeldung vom qfile header. War auch nicht drauf aus, dass mir hier jmd. nen Code postet...

Hier wollte ich erstmal nur testen das er mir eine Datei ausgibt mit "test" als Inhalt.

W

Verfasst: 15. Juni 2007 11:19
von Christian81
getSaveFileName ist ne static function - also nicht nötig eine Instanz von QFileDialog zu erstellen

Und wie lautet die Fehlermeldung?

Verfasst: 15. Juni 2007 11:23
von wojtek85
C:/Qt/4.2.3/include/QtCore/../../src/corelib/io/qfile.h: In member function `void MainWindow::saveComment()':
C:/Qt/4.2.3/include/QtCore/../../src/corelib/io/qfile.h:168: error: `QFile& QFile::operator=(const QFile&)' is private
mainwindow.cpp:521: error: within this context

Verfasst: 15. Juni 2007 11:31
von Christian81
Und jetzt noch was in mainwindow.cpp:521 steht... kommt denk ein bischen mit!

Verfasst: 15. Juni 2007 11:35
von wojtek85
Das ist ja das Ding, kann mit den Fehler nichts anfangen bzgl. 520 in der cpp, da das hier die Zeilen 519 und 520 sind :

Code: Alles auswählen

    newComment = QFileDialog::getSaveFileName(this, tr("Save"),
                          "/", tr("Textdatei (*.txt)"));
Weiss nicht was daran falsch ist...

Verfasst: 15. Juni 2007 11:39
von Christian81
ok, das hätte ich eher sehen müssen... FileDialog::getSaveFileName() gibt einen QString zurück und kein QFile.
Ich schätze Du solltest erst den Dateinamen vom Nutzer abfragen, dann die Datei öffnen und die Daten reinschreiben.

Verfasst: 15. Juni 2007 11:44
von wojtek85
Jo ok, jetzt hab ichs auch kapiert. Klingt auch logisch, weil eine Datei öffnen und beschreiben die es nicht gibt ist schwierig, aber so klappt es wunderbar:

Code: Alles auswählen

    QString comment = QFileDialog::getSaveFileName(this, tr("Save"),
                          "/", tr("Textdatei (*.txt)"));

    QFile newComment(comment);
    if(newComment.open(QIODevice::WriteOnly  | QIODevice::Text))
    {
        QTextStream out(&newComment);
        out << "test" << endl;
        newComment.close();
    }
Vielen Dank für die Hilfe!

Gruß, Wojtek