gpt4 book ai didi

c++ - QFileInfo size() 正在返回快捷方式目标大小

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

我正在像这样扫描文件夹大小:

qint64 dirSize = 0;
int fileCount = 0;

for(QDirIterator itDir(someDir, QDir::NoDotAndDotDot|QDir::Files|QDir::Hidden|QDir::System,
QDirIterator::Subdirectories);
itDir.hasNext(); )
{
itDir.next();
dirSize += itDir.fileInfo().size();
++fileCount;
}

这似乎工作正常。

但是,我注意到包含 Windows 快捷方式的文件夹 (.lnk) 返回的大小比预期的大得多。原因是返回的是快捷方式目标的大小,而不是快捷方式文件本身的大小。

但根据QFileInfo documentation :

On Windows, symlinks (shortcuts) are .lnk files. The reported size() is that of the symlink (not the link's target) [...]

所以我的问题是:我在这里做错了什么?如何获取快捷方式文件的大小?

最佳答案

出于测试目的,我创建了一个 Qt 的 DLL 文件的快捷方式。我将此快捷方式放入一个空文件夹中。我还创建了 Qt 的 sdktool.exe 的快捷方式并将其放在同一文件夹中。

我还注意到 size() 返回实际文件的大小而不是快捷方式的大小。我记得我在我的旧项目中有一些类似的行为,我所做的是在读取大小之前打开文件。

for (QDirIterator itr(someDir, QDir::NoDotAndDotDot|QDir::Files|QDir::Hidden|QDir::System,
QDirIterator::Subdirectories); itr.hasNext();) {
itr.next();

// Shows wrong size
qDebug() << itr.fileName() << ", size (unopened): " << itr.fileInfo().size();

QFile file(itr.filePath());
if (file.exists() && file.open(QIODevice::ReadOnly)) {
// Now the size shows correctly
qDebug() << "Size when opened: " << file.size();
file.close();
}
}

输出:

"sdktool.lnk" , size (unopened):  2817024
Size when opened: 1325
"test.lnk" , size (unopened): 4429312
Size when opened: 951

Windows 10的文件属性窗口显示“test.lnk”的大小为951字节,“sdktool.lnk”的大小为1325字节。

关于c++ - QFileInfo size() 正在返回快捷方式目标大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53411886/

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