2016-08-04 7 views
3

Wenn Sie eine Textdatei in Qt zu schreiben (mit QFile und QTextStream), jede \n oder endl automatisch in die richtige Plattform-spezifische Linie umgewandelt endet (z \r\n für Windows).Wählen Sie benutzerdefinierte Zeilenende für Textdatei Schreiben von Qt

Ich möchte den Benutzer wählen lassen, welche Dateiendung verwendet wird.

Gibt es eine Möglichkeit, die gewünschte Zeile in Qt zu setzen, ohne den Binärdateimodus zu verwenden?

Antwort

5

Nein, gibt es nicht. Die Bedeutung des Textmodus ist "führe Zeilenende-Änderungen an diesen der Plattform aus". Wenn Sie etwas anderes tun möchten, verwenden Sie den Binärmodus und implementieren Sie die Konvertierung, indem Sie z. QFile::writeData und QFile::readData.

template <class Base> class TextFile : public Base { 
    QByteArray m_ending; 
    qint64 writeData(const char * data, qint64 maxSize) override { 
    Q_ASSERT(maxSize <= std::numeric_limits<int>::max()); 
    QByteArray buf{data, maxSize}; 
    buf.replace("\n", m_ending.constData()); 
    auto len = Base::writeData(buf.constData(), buf.size()); 
    if (len != buf.size()) { 
     // QFile/QSaveFile won't ever return a partial size, since the user 
     // such as `QDataStream` can't cope with it. 
     if (len != -1) qWarning() << "partial writeData() is not supported for files"; 
     return -1; 
    } 
    return len; 
    } 
    ... 
} 

TextFile<QFile> myFile; 
... 
Verwandte Themen