2016-08-04 6 views
3

QFileおよびQTextStreamを使用してQtにテキストファイルを書き込むとき、\nまたはendlは自動的に正しいプラットフォーム固有の行末に変換されます(Windowsの場合は\r\n)。Qtによるテキストファイル書き込みのカスタム行終了の選択

私は、ユーザーにどのファイルエンディングが使用されるかを選択させたいと思います。

バイナリファイルモードを使用せずにQtで終わる行を設定する方法はありますか?

答えて

5

いいえ、ありません。テキストモードの意味は、「これらのプラットフォームの行末の変更を実行する」ことです。他に何かしたいのであれば、バイナリモードを使用し、例を再実装して変換を実装してください。 QFile::writeDataおよび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; 
... 
関連する問題