一、环境介绍
操作系统: win10 64位
QT版本: QT5.12.6
编译器: MinGW 32
二、快速创建指定大小的空文件
2.1 核心函数
#include <windows.h>
/*
工程: UDP_Client
日期: 2021-04-22
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 创建一个指定大小的空文件
// 创建的文件总大小 = dwHigh * 4G + dwLow
// 当总大小小于4G时,dwHigh可以设置为0,dwLow数字最大为4G - 1
*/
BOOL Widget::CreateTempFile(DWORD dwHigh, DWORD dwLow, TCHAR* pFileName)
{
HANDLE hFile;
HANDLE hMapFile;
hFile = CreateFile(
pFileName,
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ,
nullptr,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
nullptr
);
if( hFile == INVALID_HANDLE_VALUE )
{
Log_Text_Display("文件创建失败1.\n");
return FALSE;
}
hMapFile = CreateFileMapping(
hFile,
nullptr,
PAGE_READWRITE,
dwHigh,
dwLow,
nullptr
);
if( hMapFile == nullptr )
{
Log_Text_Display("文件创建失败2.\n");
CloseHandle( hFile );
return FALSE;
}
CloseHandle( hMapFile );
CloseHandle( hFile );
Log_Text_Display("随机文件创建成功.\n");
return TRUE;
}
2.2 调用示例
//如果文件不存在
if(file.exists()==false)
{
int value=ui->spinBox_auto_create_file_size->value();
QDateTime current_date_time =QDateTime::currentDateTime();
QString current_date =current_date_time.toString("yyyy-MM-dd-hh-mm-ss");
Src_File=(QString("%1/%2.txt").arg(ui->lineEdit_auto_create_file_path->text()).arg(current_date));
wchar_t *pWideChar = new wchar_t[Src_File.size()+1];
int actualLen =Src_File.toWCharArray(pWideChar);
pWideChar[actualLen]='\0';
//如果大于4G
if(value>4*1024)
{
//自动创建文件
create_flag=CreateTempFile(value/(4*1024),value%(4*1024),pWideChar);
}
else
{
//自动创建文件
create_flag=CreateTempFile(0,value*1024*1024,pWideChar);
}
//释放内存
delete [] pWideChar;
}