gpt4 book ai didi

c++ - 在 Qt 中创建目录的哈希值

转载 作者:搜寻专家 更新时间:2023-10-31 01:07:04 25 4
gpt4 key购买 nike

有什么办法可以确定自上次访问以来目录内容(包括深层子目录结构)是否发生了变化?我正在寻找 C/C++ 的可移植解决方案,最好是 Qt。

附言:如果相关,问题的背景。在我的应用程序中,当某些条件为真时,我必须递归扫描许多目录并在数据库中导入一些数据。导入目录后,我用文件“.imported”标记它并在下次忽略。

现在我想标记也已扫描但未导入的目录。为此,我将存储一个包含目录哈希的文件。因此,在扫描之前,我可以将计算出的哈希值与文件中的最后一个哈希值进行比较,如果它们相等则跳过扫描。

最佳答案

有一个QFileSystemWatcher将通知您更改的类。

如果你想创建目录及其内容的加密哈希,我就是这样做的:-

void AddToHash(const QFileInfo& fileInf, QCryptographicHash& cryptHash)
{
QDir directory(fileInf.absoluteFilePath());
directory.setFilter(QDir::NoDotAndDotDot | QDir::AllDirs | QDir::Files);
QFileInfoList fileInfoList = directory.entryInfoList();

foreach(QFileInfo info, fileInfoList)
{
if(info.isDir())
{
// recurse through all directories
AddToHash(info, cryptHash);
continue;
}

// add all file contents to the hash
if(info.isFile())
{
QFile file(info.absoluteFilePath());
if(!file.open(QIODevice::ReadOnly))
{
// failed to open file, so skip
continue;
}
cryptHash.addData(&file);
file.close();
}
}
}

// create a fileInfo from the top-level directory
QFileInfo fileInfo(filePath);
QString hash;
// Choose an arbitrary hash, say Sha1
QCryptographicHash cryptHash(QCryptographicHash::Sha1);
// add all files to the hash
AddToHash(fileInfo, cryptHash);
// get a printable version of the hash
hash = cryptHash.result().toHex();

关于c++ - 在 Qt 中创建目录的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19863970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com