QTの研究ノートQDataStreamクラス

QDataStreamのために、最初にQTを通じてファイルを読むために、その後、別のデバイスにダウンロード。QDataStreamを直接読んだ後、バイナリデータフローモードを読み取ることで、ファイルを別の場所に書き込むことができます提供した後、分析データに送信されます。ここでは、任意のは、実際には、エンコードされていなかったコーディングせずにバイナリファイルを読み出すことに注意しなければならない、そうではないプロセスデータ型変換です。などのchar、短い、int型、CHAR *、:あなたは、人々がコンテンツを含む、他のタイプに変換する必要が読ませるためには、この方法でファイルを読み込む場合

QDataStreamによってファイルを読み取る方法で見てみましょう、

    QFile aFile("file.dat");  //定义一个文件,file.dat
    char* temData = new char[200];
    if (!(aFile.open(QIODevice::ReadOnly)))//用只读的方式打开文件
        return false;
    QDataStream aStream(&aFile); //定义一个数据流,指向file.dat
    aStream.readRawData(temData, 200);//读取数据,存入temData

実際には、アウト、チュートリアル、神の参照豆の内部ストリームから直接読み取られる読み取りの方法がある、書くことができます:

    QFile aFile("file.dat");  //定义一个文件,file.dat
    QString str;
    qint32 tem;
    if (!(aFile.open(QIODevice::ReadOnly)))//用只读的方式打开文件
        return false;
    QDataStream aStream(&aFile); //定义一个数据流,指向file.dat
    aStream >> tem >> str;//读取数据,存入tem和str

そこで、必要になる順次データ・ストリームから読み取られたデータを書き込むことの問題は、順序はあなたが、あなたの中だか分からない書かれたものは読んでいないファイルを想定し、記述する必要がありますがあり、このようそれは現実的ではありません。間違った順序ならば、それは直接プログラムの崩壊につながる可能性があるため。あなたがこれを読みたいする必要がある場合は、この文脈では、そのファイルには、独自のものを書く、あるいは明確に書き込まれたデータの順序を知ることが最善です。あなたはので、上記の方法が実現可能であることを読みたい場合は、我々は、例を挙げれば、書き込みのために、以下の方法を採用する必要があります。

    QFile aFile("file.dat");
    if (!(aFile.open(QIODevice::WriteOnly)))//用只写的方式打开文件
        return false;
    QDataStream aStream(&aFile);
    bStream << qint32(3);
    bStream << QString("apples");

書き込みと読み込みの上記の順序を分析します。書き込みを行う場合、データは最初のQStringの文字列を書き換え、qint32整形を書かれている、読み取り、データが最初の読み出しTEMシェーピングは、文字列strを再読み込みです。書き込みと読み出しが対応するシーケンスです。順序が明確ではない、請求readRowData機能が読み場合は、書き込みシーケンスへの要件がない、ファイルが外国であったとしても、それを読み取ることができます。

もう一つの問題は、データがここでストリーミングの問題の原因、ので、あなたは、データストリームのQTのバージョンを指定することができるかもしれ異なるQTバージョンは、我々は例を与えるということです。

    QFile aFile("file.dat");
    if (!(aFile.open(QIODevice::WriteOnly)))//用只写的方式打开文件
        return false;   
    out.setVersion(QDataStream::Qt_5_5);//指定QT版本号
    out << QString("magic Num");    // 写入数据

実際には、バイナリファイルはマシンを見ている、ユーザーは、ユーザーがファイルが合法かどうかを判断することができるようにそう、バイナリファイルは通常、マークのファイルタイプへのマジックナンバーを使用して、それが間違っているかどうかわからない、真と偽を区別することはできません、正しいバージョンかどうか。マジックナンバーは、ファイルの先頭に記述することができ、データの書き込み方法は、上記と同じです。

最後の質問、QDataStreamのカーソル位置は、このカーソルポインタに相当し、読み取りおよび書き込みすることによって制御することができるが、それはその裏面上で操作を読み書きする場所を指します。私たちの最初の書き込みデータ場合を想像し、近くにファイルまたはファイルを更新した後、彼らが読んで、それを読み出すだろうか?答えはノーです。データを書き込んだ後、カーソルはファイルの一番最後にあるので、この時間は、ファイル、カーソルバック何を読み取ります。実際には、「<<」正しい行動は、このされ、その結果、再定義されています。

    QFile aFile("file.dat");
    QString str;
    qint32 tem;
    if (!(aFile.open(QIODevice::WriteOnly)))//用只写的方式打开文件
        return false;   
    QDataStream aStream(&aFile);
    bStream << qint32(3); //写入数据
    bStream << QString("apples");
    bStream.device()->seek(0);//游标回到文件最开始的地方,必须有这一步!
    aFile.fush(); //这一步是刷新文件,让写进去的文件生效
    //aFile.close();
    aStream >> tem >> str;//读取数据,存入tem和str  
    qDebug() << str << tem;//打印出来看看结果

上記のコードは、リフレッシュのファイルを持っているこのステップは、書き込み操作が有効になりませんので、データは、空になります読んでいない場合は、実際には、フラッシュです。あなたは、書き込み操作が有効になるように、「()aFile.close」というフレーズをブロックされているファイルを、リフレッシュ直接近いリフレッシュするかどうかを持っています。

かなり多くのこと。

公開された11元の記事 ウォンの賞賛9 ビュー676

おすすめ

転載: blog.csdn.net/yimuta9538/article/details/103703249