【发布时间】:2014-10-25 00:20:29
【问题描述】:
这是我的代码 sn-p
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();
【问题讨论】: