Windows快速创建大文件的三种方法

 

一、使用内存映射文件:

CreateFileMapping的参数可以设置最大长度,当实际文件的长度小于设置的最大长度时,系统自动扩展。注意:在CreateFile的时候要加写权限。

    HANDLE hFile;

    HANDLE hMapFile;

    hFile = CreateFile(

        "D://LargeFile.dat",

        GENERIC_WRITE | GENERIC_READ,

        FILE_SHARE_READ,

        NULL,

        CREATE_ALWAYS,

        FILE_ATTRIBUTE_NORMAL,

        NULL

        );

    if( hFile == INVALID_HANDLE_VALUE )

    {

        printf( "create file failed./n" );

        return;

    }

    hMapFile = CreateFileMapping(

        hFile,

        NULL,

        PAGE_READWRITE,

        0,

        2*1024*1024, // 2 MByte

        NULL

        );

    if( hMapFile == NULL )

    {

        printf( "create file mapping failed./n" );

        CloseHandle( hFile );

        return;   

    }

    printf( "OK!/n" );

    CloseHandle( hMapFile );

    CloseHandle( hFile );

二、设置文件指针 + 设置EOF

两个API完成,首先调用SetFilePointer,在参数里填入所需的长度,再调用SetEndOfFile,完成。

    HANDLE hFile;

    hFile = CreateFile(

        "D://LargeFile1.dat",

        GENERIC_WRITE | GENERIC_READ,

        FILE_SHARE_READ,

        NULL,

        CREATE_ALWAYS,

        FILE_ATTRIBUTE_NORMAL,

        NULL

        );

    if( hFile == INVALID_HANDLE_VALUE )

    {

        printf( "create file failed./n" );

        return;

    }

    SetFilePointer(

        hFile,

        2*1024*1024,

        NULL,

        FILE_BEGIN

        );

    SetEndOfFile( hFile );

    printf( "OK!/n" );

    CloseHandle( hFile );

三、设置文件指针 + 写1Byte

也是两个API完成,首先调用SetFilePointer,再调用WriteFile写入1byte就完成了。

    HANDLE hFile;

    DWORD dwR;

    hFile = CreateFile(

        "D://LargeFile2.dat",

        GENERIC_WRITE | GENERIC_READ,

        FILE_SHARE_READ,

        NULL,

        CREATE_ALWAYS,

        FILE_ATTRIBUTE_NORMAL,

        NULL

        );

    if( hFile == INVALID_HANDLE_VALUE )

    {

        printf( "create file failed./n" );

        return;

    }

    SetFilePointer(

        hFile,

        2*1024*1024 - 1,

        NULL,

        FILE_BEGIN

        );

    WriteFile(

        hFile,

        "A",

        1,

        &dwR,

        NULL

        );

    printf( "OK!/n" );

    CloseHandle( hFile );

    写完收工,顺便说一下,第三种方法是FlashGet使用的方法。第一种方法只发一个IRP,速度最快,第二种要发两个IRP,第三种也是发两个IRP,不过还有一个写动作,速度略慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值