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