在編寫文件讀寫程序時,經常會涉及到文件指針的操作。C語言中提供了一種非常方便的文件指針操作方法——使用庫函數fseek()、ftell()等。在這些函數中,fseek()函數就是用來設置文件指針位置的。下面就來詳細介紹一下使用seek函數操作文件。
一、利用fseek函數實現文件隨機訪問
在操作文件時,我們有時需要隨機訪問文件中任意位置的數據。這時就可以使用fseek函數進行隨機定位。
int fseek(FILE *stream, long int offset, int origin);
fseek函數用於定位指定文件流 stream 的文件位置指針。其原型為:
其中,stream 是文件指針;offset 是偏移量;origin 是起始點設置參數。
起始點參數可以為 SEEK_SET 表示從文件頭開始, SEEK_CUR 表示從文件當前讀寫位置開始, SEEK_END 表示從文件尾部開始。偏移量 offset 可以為正數(向文件尾移動)或負數(向文件頭移動)。
例如:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ FILE *fp; fp = fopen("test.txt","w+"); fputs("This is a test", fp); fseek(fp, 7, SEEK_SET); fputs(" file",fp); fclose(fp); return 0; }
在這個例子中,文件test.txt中原來的內容是”This is a test”,使用fseek函數將文件指針移動到第7個字節的位置,然後使用fputs函數向文件中插入” file”,最終輸出的文件內容為”This is a file”。
二、利用fseek函數實現插入數據
假設現在需要將數據插入到文件的指定位置,而不是直接覆蓋原有數據,那麼可以利用fseek函數來移動文件指針,然後調用fwrite函數將數據寫入指定位置。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ FILE *fp; fp = fopen("test.txt","rb+"); fseek(fp, 6, SEEK_SET); char insert[] = "insert"; fwrite(insert, strlen(insert), 1, fp); fclose(fp); return 0; }
在這個例子中,偏移量為6表示在文件指針的第6個位置開始插入數據,利用fwrite函數寫入insert數據。需要注意的是,文件必須以二進制方式打開,否則插入的數據可能會覆蓋原有數據。
三、利用fseek函數實現刪除數據
有時候我們需要在文件中刪除指定位置的數據,可以使用fseek函數將文件指針移動到指定位置,然後調用fwrite函數將NULL寫入指定位置,相當於刪除了指定位置的數據。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ FILE *fp; fp = fopen("test.txt","rb+"); fseek(fp, 6, SEEK_SET); char delete = '\0'; fwrite(&delete, sizeof(char), 1, fp); fclose(fp); return 0; }
在這個例子中,偏移量為6表示刪除文件指針的第6個位置的數據,利用fwrite函數寫入NULL。需要注意的是,刪除數據時同樣需要將文件以二進制方式打開。
總之,在文件IO編程過程中,操作文件指針是十分重要的。使用fseek函數可以實現文件隨機訪問,插入數據和刪除數據等操作,能夠大大提高文件讀寫效率。
原創文章,作者:IVZV,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/140819.html