如何快速创建大文件

有时候平时做试验,需要一些指定大小的文件来测试,还要到处去找,有时候找到合适大小的文件还挺困难,现在微软提供了一个命令fsutil.exe,可以自己创建指定大小的文件。

语法:

fsutil file [createnewPathName length

范例:fsutil file createnew d:\aa.txt 4096

创建10G文件:fsutil file createnew D:\bigfile\1.txt 10000000000

就可以在D盘下创建一个名字为aa.txt的4K大小的文件。注意:它的长度是以字节为单位的。

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,不过还有一个写动作,速度略慢。



你可能感兴趣的:(如何快速创建大文件)