【发布时间】:2014-06-01 16:32:18
【问题描述】:
我读到以二进制格式保存文件比以基于文本的格式保存文件更紧凑。但是我的二进制格式文件怎么比基于文本的文件大呢?
以下是我编写的函数的基础知识。两者都扫描了同一个目录。基于二进制的文件总是大几千字节。
基于文本:
void oldSave(){
QFile file("sentry.dat");
QTextStream out(&file);
file.open(QIODevice::WriteOnly);
QDir dir = dirSelect;
out << "Directory: " << dirSelect << endl;
//prepend directory from which scan was selected to begin from
out << QCryptographicHash::hash(hashFile.readAll(),
QCryptographicHash::Md5).toHex()
<< " : " << hashFile.fileName() << "\n";
基于二进制:
void saveFile(){
QFile file("sentry.dat");
QDataStream out(&file);
file.open(QIODevice::WriteOnly);
QDir dir = dirSelect;
out << dirSelect;
out << QCryptographicHash::hash(hashFile.readAll(), QCryptographicHash::Md5)
<< hashFile.fileName();
【问题讨论】:
-
您确定您知道每个文件的精确大小吗?根据您的文件查找器报告大小的方式,您可能会看到操作系统管理硬盘驱动器上数据块的方式的工件。您可以尝试编写一个小程序来读取每个文件并计算 eof 的字节数。
-
你应该写一个正确的SSCCE。此外,使用十六进制编辑器检查文件的内容以了解数据的保存方式,您应该会看到差异。以二进制形式输出 MD5 的大小应该是字符串版本的一半。
-
toHex方法可能会在 ASCII 十六进制转换中转换内部表示。例如,值 0x25(1 个字节的内部表示)可以转换为 0x30、0x78、0x32、0x35,即 '0'、'x'、'2'、'5' 的 ASCII 码。因此将二进制文件扩展 4 倍(前面有“0x”)或 2 倍(没有“0x”)。
标签: c++ linux qt file-io binary