我有一个文件列表,我想序列化每个文件的文件信息并通过套接字发送。
我看到可以像这样进行序列化,例如:
QByteArray ba;
QDataStream ds(&ba);
ds << my_stringlist;
QByteArray ba;
QDataStream ds(&ba);
ds >> my_stringlist;
但我找不到对QFileInfo
. 是否可以序列化这种Qt
数据类型?有什么方法可以轻松实现这种类型的完整序列化,或者我只需要将数据分解为原始单元?
我有一个文件列表,我想序列化每个文件的文件信息并通过套接字发送。
我看到可以像这样进行序列化,例如:
QByteArray ba;
QDataStream ds(&ba);
ds << my_stringlist;
QByteArray ba;
QDataStream ds(&ba);
ds >> my_stringlist;
但我找不到对QFileInfo
. 是否可以序列化这种Qt
数据类型?有什么方法可以轻松实现这种类型的完整序列化,或者我只需要将数据分解为原始单元?
没有标准的方法可以做到这一点。您可以定义自定义 QDataStream 运算符,如本答案所示,或者您可以编写自己的函数来转换QFileInfo
和QVariant
返回,并使用QVariant
序列化。在所有这些方式中,您都需要将数据分解为原始单元,是的。
但是我认为序列化QFileInfo
是没有意义的。您应该使用QFileInfo::absoluteFilePath()
来获取文件的路径并序列化该路径。QFileInfo
如果您的接收代码在同一台机器上运行,则可以轻松地从该路径构造一个新对象。
如果您的代码在另一台机器上运行,即使可能,您也不能使用反序列化QFileInfo
。这是因为 QFileInfo 可能存储也可能不存储有关文件的信息。当您运行 egQFileInfo::isFile
时,它可能会向底层文件系统发出请求。
所以我认为最好从QFileInfo
add send this data 请求所有需要的数据而不是 send QFileInfo
。或者您可以只发送绝对文件路径。