wake-up-neo.net

Erstellen/Schreiben in eine neue Datei in Qt

Ich versuche, in eine Datei zu schreiben, und wenn die Datei nicht existiert, erstellen Sie sie. Ich habe im Internet gesucht und nichts hat für mich funktioniert.

Mein Code sieht aktuell so aus:

QString filename="Data.txt";
QFile file( filename );
if ( file.open(QIODevice::ReadWrite) )
{
    QTextStream stream( &file );
    stream << "something" << endl;
}

Wenn ich eine Textdatei mit dem Namen "Data" im Verzeichnis erstellt, bleibt sie leer. Wenn ich nichts erstellt habe, wird auch die Datei nicht erstellt .. __ Ich weiß nicht, was ich damit tun soll, dies ist nicht der erste Weg, auf dem ich versuchte, eine Datei zu erstellen/schreiben, und keine der Wege funktionierten.

Danke für deine Antworten.

44
Tom83B

Sind Sie sicher, dass Sie sich im richtigen Verzeichnis befinden?
Wenn Sie eine Datei ohne vollständigen Pfad öffnen, wird sie im aktuellen Arbeitsverzeichnis geöffnet. In den meisten Fällen ist dies nicht das, was Sie wollen. Ändern Sie die erste Zeile in 

QString filename="c:\\Data.txt" oder
QString filename="c:/Data.txt"

und prüfen, ob die Datei in c:\ erstellt wurde

21
shoosh

Das ist komisch, alles sieht gut aus. Bist du sicher, dass es für dich nicht funktioniert? Da diese main sicherlich für mich funktioniert, würde ich an einem anderen Ort nach der Ursache Ihres Problems suchen.

#include <QFile>
#include <QTextStream>


int main()
{
    QString filename = "Data.txt";
    QFile file(filename);
    if (file.open(QIODevice::ReadWrite)) {
        QTextStream stream(&file);
        stream << "something" << endl;
    }
}

Der von Ihnen bereitgestellte Code ist auch fast derselbe wie in detaillierte Beschreibung von QTextStream Ich bin mir ziemlich sicher, dass das Problem an anderer Stelle liegt :)

Beachten Sie auch, dass die Datei nicht Data, sondern Data.txt heißt und sich in dem Verzeichnis befinden sollte, in dem das Programm ausgeführt wurde (nicht unbedingt das Verzeichnis, in dem sich die ausführbare Datei befindet).

21
Palmik
#include <QFile>
#include <QCoreApplication>
#include <QTextStream>

int main(int argc, char *argv[])
{
    // Create a new file     
    QFile file("out.txt");
    file.open(QIODevice::WriteOnly | QIODevice::Text);
    QTextStream out(&file);
    out << "This file is generated by Qt\n";

    // optional, as QFile destructor will already do it:
    file.close(); 

    //this would normally start the event loop, but is not needed for this
    //minimal example:
    //return app.exec();

    return 0;
}
8
d.danailov

Ihr Code ist vollkommen in Ordnung, Sie suchen einfach nicht nach dem richtigen Ort, um Ihre Datei zu finden. Da Sie keinen absoluten Pfad angegeben haben, wird Ihre Datei relativ zum aktuellen Arbeitsordner erstellt (genauer gesagt im aktuellen Arbeitsordner in Ihrem Fall).

Ihr aktueller Arbeitsordner wird von Qt Creator festgelegt. Gehen Sie zu Projekte >> Ihr ausgewähltes Build >> Klicken Sie auf die Schaltfläche "Ausführen" (neben "Build"), und Sie sehen auf dieser Seite, was es ist.

 enter image description here

3
zar

Es kann vorkommen, dass die Ursache nicht darin liegt, dass Sie das richtige Verzeichnis nicht finden. Sie können beispielsweise aus der Datei lesen (auch ohne absoluten Pfad), aber Sie können scheinbar nicht in die Datei schreiben.

In diesem Fall kann es sein, dass Sie das Programm beenden, bevor das Schreiben abgeschlossen werden kann.

Wenn Ihr Programm eine Ereignisschleife verwendet (wie bei einer GUI-Anwendung, z. B. QMainWindow), ist dies kein Problem. Wenn Ihr Programm jedoch unmittelbar nach dem Schreiben in die Datei beendet wird, sollten Sie den Textstrom leeren. Das Schließen der Datei reicht nicht immer aus (und ist nicht erforderlich, da sie im Destruktor geschlossen wird).

stream << "something" << endl;
stream.flush();

Dies garantiert, dass die Änderungen in die Datei übernommen werden, bevor das Programm mit dieser Anweisung fortfährt. 

Das Problem scheint zu sein, dass das QFile vor dem QTextStream zerstört wird. Selbst wenn der Stream in seinem Konstruktor geleert wird, ist es zu spät, da die Datei bereits geschlossen ist.

0
vsz
QFile file("test.txt");
/*
 * If file not exit it will create
 * */
if (!file.open(QIODevice::ReadOnly | QIODevice::Text | QIODevice::ReadWrite))
{
    qDebug() << "FAIL TO CREATE FILE / FILE NOT EXIT***";
}

/*for Reading line by line from text file*/
while (!file.atEnd()) {
    QByteArray line = file.readLine();
    qDebug() << "read output - " << line;
}

/*for writing line by line to text file */
if (file.open(QIODevice::ReadWrite))
{
    QTextStream stream(&file);
    stream << "1_XYZ"<<endl;
    stream << "2_XYZ"<<endl;
}
0