1

ファイルのリストがあり、すべてのファイルのファイル情報をシリアル化し、ソケット経由で送信したいと考えています。

たとえば、次のようにシリアル化できることがわかりました。

QByteArray ba;
QDataStream ds(&ba);
ds << my_stringlist;

QByteArray ba;
QDataStream ds(&ba);
ds >> my_stringlist;

のサポートが見つかりませんでしたQFileInfo。このQtデータ型をシリアル化することは可能ですか? このタイプの簡単な完全シリアル化を取得する方法はありますか、それともデータをプリミティブ単位に分割する必要があるだけですか?

4

1 に答える 1

3

これを行う標準的な方法はありません。この回答に示されているようにカスタム QDataStream 演算子を定義するか、独自の関数を作成して変換QFileInfoQVariant、シリアル化を使用することができますQVariant。これらすべての方法で、データをプリミティブ単位に分割する必要があります。

QFileInfoしかし、シリアライズは無意味だと思います。を使用QFileInfo::absoluteFilePath()してファイルのパスを取得し、代わりにそのパスをシリアル化する必要があります。受信コードが同じマシンで実行されている場合、そのパスから新しいQFileInfoオブジェクトを簡単に作成できます。

コードが他のマシンで実行されている場合、QFileInfo可能であっても deserialized を使用できませんでした。これは、QFileInfo がファイルに関する情報を保存する場合と保存しない場合があるためです。eg を実行するQFileInfo::isFileと、基盤となるファイル システムにリクエストが送信される場合があります。

QFileInfoしたがって、必要なすべてのデータをadd send this data ではなく send this data に要求する方がよいと思いますQFileInfo。または、絶対ファイル パスを送信することもできます。

于 2013-06-23T16:00:21.400 に答える