Windows快速创建大文件的三种方法
2008-01-09 13:09
453 查看
一、使用内存映射文件:
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,不过还有一个写动作,速度略慢。
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,不过还有一个写动作,速度略慢。
相关文章推荐
- 在Linux下访问windows共享文件并创建中文文件的方法
- Windows上快速创建一个1G以上的大文件
- Windows平台下,将mdb文件快速向MySQL中导入数据的方法
- Windows下自由创建.htaccess文件的几种方法
- windows系统快速删除多个文件/夹的方法
- Spring配置文件的三种方法(创建测试类Test.java)
- 利用windows的rar工具创建自解压安装文件的方法
- 在windows系统上创建文件时默认编码UTF-8编码的方法(from internet)
- Htaccess文件是什么以及Windows下自由创建.htaccess文件的N种方法
- windows下删除大量文件的快速方法
- 在Linux下访问windows共享文件并创建中文文件的方法
- Windows下自由创建.htaccess文件的N种方法
- windows下快速向ipad拷贝文件的方法
- ubuntu/linux mint 创建proc文件的三种方法(两)
- ubuntu/linux mint 创建proc文件的三种方法(一)
- windows 快速创建大文件
- windows下快速创建大文件
- 快速打开文件命令行的三种方法
- Windows下创建.htaccess文件的N种方法
- Windows下自由创建.htaccess文件的N种方法