QTアプリケーションプログラミング:指定したサイズの空のファイルをすばやく作成する

2258 ワード

一、環境紹介
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;
        }