关于C/C++生成特定大小文本文件的初探
2015-08-21 18:43
701 查看
由于测试客户端传文件的文件大小限额需要,要有一个测试工具来生成指定大小的文件
最初的想法是通过循环语句,利用文件读写流来生成特定大小的文件,但是实际情况是生成一个1.99G的文件,耗费的时间以小时来计算,而且生成的大小也不是很理想,生成的文件最后都到2.0GB以上了;这样的程序显然是效率极低的废物
首先要明确的一点是:创建特定大小的文件,要区分写入数据和不写入数据两种情况
1如果不需要写入数据,只是创建一个特定大小的文件:使用windows api 函数
----文件指针 SetFilePointer SetEndOfFile GetFileType
1).可以将文件指针设置超过当前文件的大小,除非在该位置向文件写入数据或者 ,否则不会更改文件在磁盘上的实际大小。
2).如果文件使用FILE_FLAG_NO_BUFFERING打开的,那么文件指针只能设置成扇区大小的整数倍
通过SetEndOfFile()改变文件大小
/////////////////////////////////////
ftruncate
lseek,这个linux就这份
这个
win的我也发了
你看看
你创建好了,可用内存映射文件映射后写入 http://blog.csdn.net/wangyeqiang/article/details/8577165 http://blog.chinaunix.net/uid-26806098-id-3141386.html http://blog.csdn.net/sx5486510/article/details/7513957 http://baike.baidu.com/link?url=DdOc4ifT8anhLhXkj6FCTRsWZSVmV0RK5K25GdH4Z0Yj6EJmNGPf9C2kR889_RT-BlVenLAsvNO0gmilPegaSq http://www.cnblogs.com/fangyukuan/archive/2010/09/09/1822216.html http://fx1.fx.uodoo.com/?v=1&src=l4uLj8XQ0J2elpSa0ZLRjJCYkIrRnJCS0J2elpSa0JOakpKetpGZkNGVjI%2FAk5abwsfKys%2FPx8fZlpyZnsLOzM%2FGzs%2FM&restype=1&ucshare=1&ucshareplatform=6&country=cn&os=adr&pf=m9eC3e756L8%3D http://fx1.fx.uodoo.com/?v=1&src=l4uLj8XQ0Iiej52elpSa0Z2elpuK0ZyQktCJlpqI0M7NxsrHz87Rl4uSwJ6bno%2BLws7Z&restype=1&ucshare=1&ucshareplatform=6&country=cn&os=adr&pf=m9eC3e756L8%3D linux内存映射就是mmap http://bbs.csdn.net/topics/390512628 http://zhidao.baidu.com/link?url=P5EEMNExVb71nF-scIq_QK87LjejM-t0UjSZkCDF-EaTphEsRFtEuYW_yLYDqgVze2ucXMS4OT1mXlL58AK4Iq&qq-pf-to=pcqq.group http://zhidao.baidu.com/link?url=P5EEMNExVb71nF-scIq_QK87LjejM-t0UjSZkCDF-EaTphEsRFtEuYW_yLYDqgVzcMfJ9dNYrHGtHwS6ZgqpP_&qq-pf-to=pcqq.group
split生成特定大小文件
最初的想法是通过循环语句,利用文件读写流来生成特定大小的文件,但是实际情况是生成一个1.99G的文件,耗费的时间以小时来计算,而且生成的大小也不是很理想,生成的文件最后都到2.0GB以上了;这样的程序显然是效率极低的废物
首先要明确的一点是:创建特定大小的文件,要区分写入数据和不写入数据两种情况
1如果不需要写入数据,只是创建一个特定大小的文件:使用windows api 函数
----文件指针 SetFilePointer SetEndOfFile GetFileType
1).可以将文件指针设置超过当前文件的大小,除非在该位置向文件写入数据或者 ,否则不会更改文件在磁盘上的实际大小。
2).如果文件使用FILE_FLAG_NO_BUFFERING打开的,那么文件指针只能设置成扇区大小的整数倍
通过SetEndOfFile()改变文件大小
/////////////////////////////////////
ftruncate
lseek,这个linux就这份
这个
win的我也发了
你看看
你创建好了,可用内存映射文件映射后写入 http://blog.csdn.net/wangyeqiang/article/details/8577165 http://blog.chinaunix.net/uid-26806098-id-3141386.html http://blog.csdn.net/sx5486510/article/details/7513957 http://baike.baidu.com/link?url=DdOc4ifT8anhLhXkj6FCTRsWZSVmV0RK5K25GdH4Z0Yj6EJmNGPf9C2kR889_RT-BlVenLAsvNO0gmilPegaSq http://www.cnblogs.com/fangyukuan/archive/2010/09/09/1822216.html http://fx1.fx.uodoo.com/?v=1&src=l4uLj8XQ0J2elpSa0ZLRjJCYkIrRnJCS0J2elpSa0JOakpKetpGZkNGVjI%2FAk5abwsfKys%2FPx8fZlpyZnsLOzM%2FGzs%2FM&restype=1&ucshare=1&ucshareplatform=6&country=cn&os=adr&pf=m9eC3e756L8%3D http://fx1.fx.uodoo.com/?v=1&src=l4uLj8XQ0Iiej52elpSa0Z2elpuK0ZyQktCJlpqI0M7NxsrHz87Rl4uSwJ6bno%2BLws7Z&restype=1&ucshare=1&ucshareplatform=6&country=cn&os=adr&pf=m9eC3e756L8%3D linux内存映射就是mmap http://bbs.csdn.net/topics/390512628 http://zhidao.baidu.com/link?url=P5EEMNExVb71nF-scIq_QK87LjejM-t0UjSZkCDF-EaTphEsRFtEuYW_yLYDqgVze2ucXMS4OT1mXlL58AK4Iq&qq-pf-to=pcqq.group http://zhidao.baidu.com/link?url=P5EEMNExVb71nF-scIq_QK87LjejM-t0UjSZkCDF-EaTphEsRFtEuYW_yLYDqgVzcMfJ9dNYrHGtHwS6ZgqpP_&qq-pf-to=pcqq.group
split生成特定大小文件
相关文章推荐
- C++实参形参
- C++ Primer 5e chapter 10.1
- C/C++学习笔记--指针(Pointer)
- c++学习笔记(三)多态性
- iOS中OC字符串与C语言字符串之间的相互转换
- C++ Primer 5e chapter 9.2
- windows C++ 进入临界区 退出临界区
- C++ 编码转换
- 关于c++stl
- Item 4:确保变量的初始化 Effective C++笔记
- C语言回车符号和换行符
- hdu1160 FatMouse's Speed (dp,记录路径)
- 关于模版的实参推演
- C语言 字节对齐
- C++的引用语法
- C/C++易错难点笔记02
- C++ new 之 placement new、operator new、new operator
- c++ 四大函数练习
- (1.1.29)C++中定义类的对象:用new和不用new有何区别?
- C++静态成员函数小结