如何快速创建⼤⽂件
有时候平时做试验,需要⼀些指定⼤⼩的⽂件来测试,还要到处去,有时候到合适⼤⼩的⽂件还挺困难,现在微软提供了⼀个命令,可以⾃⼰创建指定⼤⼩的⽂件。
语法:
fsutil file [createnew] PathName length
范例:fsutil file createnew d:\aa.txt 4096
创建10G⽂件:fsutil file createnew D:\ 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,不过还有⼀个写动作,速度略慢。