QTアプリケーションプログラミング:指定したサイズの空のファイルをすばやく作成する
一、環境紹介
OS:win 10 64ビット
QTバージョン:QT 5.12.6
コンパイラ:MinGW 32
二、指定されたサイズの空のファイルをすばやく作成する
2.1コア関数
2.2呼び出し例
OS:win 10 64ビット
QTバージョン:QT 5.12.6
コンパイラ:MinGW 32
二、指定されたサイズの空のファイルをすばやく作成する
2.1コア関数
#include
/*
: 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.
");
return FALSE;
}
hMapFile = CreateFileMapping(
hFile,
nullptr,
PAGE_READWRITE,
dwHigh,
dwLow,
nullptr
);
if( hMapFile == nullptr )
{
Log_Text_Display(" 2.
");
CloseHandle( hFile );
return FALSE;
}
CloseHandle( hMapFile );
CloseHandle( hFile );
Log_Text_Display(" .
");
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;
}