一種方法是使用fseek到你想要的大小,然後随便寫上一個什麼位元組。
代碼如下:
FILE *fp = fopen("test1.txt","w");
nRetCode = fseek(fp, 1000, SEEK_END);
nRetCode = fwrite("hello", 5, 1, fp);
檔案的大小會增加1005。
fseek函數從其源代碼可以知道内部調用了系統API:SetFilePointer()。
第二種就是使用filemapping:
Windows下先用CreateFile建立一個0位元組的檔案或者打開一個檔案,
再用CreateFileMapping建立檔案映射核心對象并傳遞PAGE_READWRITE标志,
在函數的dwMaxumumSizeHigh和dwMaximumSizeLow中傳遞你想設定的檔案大小,
系統會自動擴充該檔案的大小以和你傳遞的參數比對,進而使你的磁盤檔案變大!
還可以調用_chsize(int fd,long size)函數直接改變。參數fd是檔案描述符。當使用FILE結構時,FILE中的_file成員就是其檔案描述符。注意,這個函數内部首先将檔案指針設定到檔案尾,然後配置設定一段堆空間,将其填0後,将其寫入檔案,直到寫到所要求的大小。這種方法就是不斷寫0而已。