在linux下如果不考虑断电系统重启等其他原因可以使用ftruncate()函数,这个函数输入参数为file descriptor 和 offset, 这个函数在unistd.h中,windows一般是用不了这个的。
另外使用文件名得到文件描述符的方法就是int fileno(FILE*); 注意之后别忘了fclose(),下面的代码里忘记写了。
#include<iostream> #include<cstdio> #include<unistd.h> using namespace std; int main(){ FILE* f = fopen("abc.txt",“w”); int fd = fileno(f); long long offset = 1024*1024*1024*(long long)2; ftruncate(fd,offset); return 0; }
在windows及其他平台可以使用fseeko(FILE* , offset, pos)这个方法
#include<iostream> #include<cstdio> using namespace std; int main(){ FILE* f = fopen("abc.txt","w"); long long offset=1024*1024*1024*(long long)2; fseeko(f,offset,SEEK_SET); int i = 10; // write i to file end fwrite(&i,sizeof(int),1,f); fclose(f); return 0; }
这样就可以快速得到2G的文件了。另外编译时不要忘记添加编译参数-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
想看大文件测试的结果到http://blog.youkuaiyun.com/cctt_1/archive/2010/05/23/5618652.aspx
快速创建大文件
本文介绍在Linux和Windows环境下如何快速创建大文件。通过使用ftruncate()函数或fseeko()方法,结合适当的编译参数,可以高效地生成指定大小的文件。
2377

被折叠的 条评论
为什么被折叠?



