以下相关操作都是在QT开发环境下
1.计算文件的Md5码
2.文件的读取(非全部读取,每次读取100M)
3.使用qApp,使程序不至于卡死(笨办法)
4.对文件的递归读取
1.计算文件的Md5码
QCryptographicHash can be used to generate cryptographic hashes of binary or text data.
#include<QCryptographicHash> //其中包含算文件的md5函数,文件一旦被修改,md5就会变
QFile file("D:/chrome下载位置/Basler_pylon_6.3.0.23157.exe");
if (file.open(QIODevice::ReadOnly))//判断文件是否打开,返回值为bool类型
{
QCryptographicHash hash(QCryptographicHash::Md5);
while(!file.atEnd()) //判断文件是否读完,如果没读完则进入循环
{
QByteArray content = file.read(100*1024*1024);//一次性读取100M
hash.addData(content); //void addData(const QByteArray &data);
qApp->processEvents();//在执行while循环的过程中刷新qapplication,使界面不至于卡死
}
QByteArray md5 = hash.result(); //Returns the final hash value.
qDebug()<< md5 << ""<< md5.toHex();//QByteArray转化为hex格式要不然就会显示乱码
file.close();
}
2. 对文件的递归读取
QStringList Widget::getFiles(const QString &path){ //QStringList是一个字符串列表
QStringList ret;
QDir dir(path);
//不要点和点点,点表示当前目录,点点表示上一级目录
QFileInfoList inforlist = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);//返回文件信息
for(int i = 0; i<inforlist.count(); ++i)
{
QFileInfo info = inforlist.at(i);
if(info.isDir())
{
QString subDir =info.absoluteFilePath();
//如果是目录,那就启用getfile,传入目录,参数
QStringList files = getFiles(subDir);
ret.append(files);
}
else
{
QString fileName = info.absoluteFilePath();
ret.append(fileName);
}
}
return ret;
}