windows - New Line er ikke skrevet på filen (Qt)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg holder en log over aktiviteter i min software ved hjælp af qtextedit. senere, når jeg vil gemme det som en tekst ved hjælp af toPlainText (), er den resulterende tekstfil en enkelt linje uden linjeskift.
Jeg starter logning med plainText () og tilføjer efterfølgende tilføjelser ved hjælp af append ().


void rocketscience::saveLog(){
QFile logFile;
QTextStream logOut;
QString logfName;

QSettings prevSet("us","fr");

    if (defaultDir.exists(prevSet.value("settings/logPath").toString()))
        logfName= QFileDialog::getSaveFileName(this,"Save File",fName,"Text (*.txt");


    if (logfName!=NULL){

    logFile.setFileName(logfName);
    logFile.open(QIODevice::WriteOnly);
    logOut.setDevice(&logFile);
    logOut<<ui.statusReport->toPlainText();
    logFile.close();
}


}

Bedste reference


Fra QTextStream-klassen reference (den linje er lidt skjult):



  Bemærk: I Windows skrives alle '\ n' tegn som '\ r \ n', hvis QTextStreams enhed eller streng åbnes ved hjælp af QIODevice :: Text flag.



hvor '\ n' er UNIX-linjen slutter og '\ r \ n' er Windows-linjen slutter (CR/LF).


Fjern initialiseringen af ​​QTextStream i starten af ​​din metode og ændrer if-sætningen til dette:


if (!logfName.isEmpty())
{
    logFile.setFileName(logfName);
    logFile.open(QIODevice::WriteOnly);
    QTextStream logOut(&logFile, QIODevice::Text);
    logOut<<ui.statusReport->toPlainText();
    logFile.close(); 
} 


Bemærk også, hvordan jeg har ændret tilstanden hvis. logfName er som standard indstillet til '', jeg er ikke sikker på, om sammenligning med NULL vil fungere. Du kan bedre bruge QString :: isEmpty () funktionen

Andre referencer 1


Sandsynligvis er filen skrevet med UNIX line endings? Du skal åbne filen i tekst for at få de lokale (Windows) line-endings:


  logFile.open(QIODevice::WriteOnly|QIODevice::Text);

Andre referencer 2


Jeg havde det samme problem. Imidlertid fungerede løsningen fra @Tim Meyer ikke for mig. I linjen:


QTextStream logOut(&logFile, QIODevice::Text);


Der vises en fejl. Så jeg gjorde følgende og arbejdede for QT5.8:


/**
* Method to save a text file.
* @param asFileName: Complete file path, including name and extension.
* @param asText: Text to be written in the file
* @return true if the save was successful, false otherwise.
*/
bool MainWindow::saveFile(QString asFileName, QString asText)
{
    QFile file(asFileName);

    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){
        QMessageBox::critical(this,"Error","File could not be opened");
        return false;
    }

    QTextStream out(&file);
    out << asText;
    file.close();

    return true;
}