C++ Qt文件大小调整在Linux中的行为很奇怪

C++ Qt文件大小调整在Linux中的行为很奇怪,c++,linux,windows,qt,file,C++,Linux,Windows,Qt,File,这是我的代码片段 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!"; retur

这是我的代码片段

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();
但是在Linux(Ubuntu12.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();
QFile文件temfile(fileUrl);
if(temfile.open(QIODevice::WriteOnly)==false)
{
qDebug()在QFile对象包装的文件描述符上使用,以便使内核实际分配磁盘上的空间

这里发生的事情是,您正在分配一个--一个充满NUL字节的文件,它的分配由您的文件系统优化为一个简单的“跟踪文件的公布大小”

作为旁注:您不应该使用这样的64位整数文本,而是将它们包装到
Q\u INT64\u C

    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();