在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