gpt4 book ai didi

c++ - Qt 文件调整大小在 Linux 中表现怪异

转载 作者:可可西里 更新时间:2023-11-01 11:29:02 25 4
gpt4 key购买 nike

这是我的代码片段

QFile temfile(fileUrl);
if(temfile.open(QIODevice::WriteOnly) == false)
{
qDebug()<<"Unable to create file!";
return;
}
if(temfile.resize(5073741824) == false) // 5GB
{
qDebug()<<"Insufficient disk space!";
return;
}
temfile.close();

现在在 Windows 上,如果 NTFS 文件系统的磁盘空间小于 5GB,它会显示

Insufficient disk space!

但在 Linux (Ubuntu 12.10) 上,即使空间不足,文件也会调整大小。右键单击属性文件大小甚至显示为 5GB,但不知何故并未考虑在内。由于上述代码检查失败,我可以创建任意数量的 5GB 文件。

当我开始写入文件时(假设 200MB),只有大小占 200MB 但显示为 5GB。

有什么解决办法吗?我希望它的行为与它在 Windows 上的行为一样。

编辑:根据 peppe 的回答,这里是工作代码:

    QFile temfile(fileUrl);
if(temfile.open(QIODevice::WriteOnly) == false)
{
qDebug()<<"Unable to create file!";
return;
}
#ifdef Q_OS_LINUX
if(fallocate(temfile.handle(), 0, 0, 5073741824) < 0)
{
qDebug()<<"Insufficient disk space!";
return;
}

#else
if(temfile.resize(5073741824) == false)
{
qDebug()<<"Insufficient disk space!";
return;
}
#endif
temfile.close();

最佳答案

使用fallocate(2)在 QFile 对象包装的文件描述符上,以使内核实际分配磁盘空间。

这里发生的是你正在分配一个 sparse file -- 一个充满 NUL 字节的文件,其分配由您的文件系统优化为简单的“跟踪文件的广告大小”。

附带说明:您不应使用此类 64 位整数文字,而应将它们包装到 Q_INT64_C 中。

关于c++ - Qt 文件调整大小在 Linux 中表现怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25594514/

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