QT应用编程: 快速创建指定大小的空文件

2022-01-07 14:41:02 浏览数 (1)

一、环境介绍

操作系统: win10 64位

QT版本: QT5.12.6

编译器: MinGW 32

二、快速创建指定大小的空文件

2.1 核心函数

代码语言:javascript复制
#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 调用示例

代码语言:javascript复制
//如果文件不存在
        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]='';

            //如果大于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;
        }
qt

0 人点赞