序列化QFileInfo

时间:2013-06-23 15:34:35

标签: qt serialization qfile qbytearray data-stream

我有一个文件列表,我想为每个文件序列化文件信息并通过套接字发送。

我看到可以这样序列化,例如:

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

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

但我找不到对QFileInfo的支持。是否可以序列化此Qt数据类型? 有没有办法获得这种类型的简单完整序列化,或者我只需要将数据分解为原始单元?

1 个答案:

答案 0 :(得分:3)

没有标准的方法可以做到这一点。您可以定义this answer中显示的自定义QDataStream运算符,也可以编写自己的函数将QFileInfo转换为QVariant并返回,并使用QVariant序列化。在所有这些方面,你需要将数据分解为原始单位,是的。

但我认为序列化QFileInfo毫无意义。您应该使用QFileInfo::absoluteFilePath()来获取文件的路径并改为序列化该路径。如果您的接收代码在同一台机器上运行,则可以从该路径轻松构建新的QFileInfo对象。

如果您的代码在另一台计算机上运行,​​即使可能,也无法使用反序列化的QFileInfo。这是因为QFileInfo可能存储也可能不存储有关文件的信息。当您运行时,例如QFileInfo::isFile,它可以向底层文件系统发出请求。

所以我认为最好从QFileInfo请求所有必需的数据添加发送此数据而不是发送QFileInfo。或者你可以发送绝对文件路径。