C語言 文件的隨機讀寫詳解及示例代碼
前面介紹的文件讀寫函數(shù)都是順序讀寫,即讀寫文件只能從頭開始,依次讀寫各個數(shù)據(jù)。但在實際開發(fā)中經(jīng)常需要讀寫文件的中間部分,要解決這個問題,就得先移動文件內部的位置指針,再進行讀寫。這種讀寫方式稱為隨機讀寫,也就是說從文件的任意位置開始讀寫。
實現(xiàn)隨機讀寫的關鍵是要按要求移動位置指針,這稱為文件的定位。
文件定位函數(shù)rewind和fseek
移動文件內部位置指針的函數(shù)主要有兩個,即 rewind() 和 fseek()。
rewind() 用來將位置指針移動到文件開頭,前面已經(jīng)多次使用過,它的原型為:
void rewind ( FILE *fp );
fseek() 用來將位置指針移動到任意位置,它的原型為:
int fseek ( FILE *fp, long offset, int origin );
參數(shù)說明:
1) fp 為文件指針,也就是被移動的文件。
2) offset 為偏移量,也就是要移動的字節(jié)數(shù)。之所以為 long 類型,是希望移動的范圍更大,能處理的文件更大。
3) origin 為起始位置,也就是從何處開始計算偏移量。C語言規(guī)定的起始位置有三種,分別為文件開頭、當前位置和文件末尾,
每個位置都用對應的常量來表示:
起始點 | 常量名 | 常量值 |
---|---|---|
文件開頭 | SEEK_SET | 0 |
當前位置 | SEEK_CUR | 1 |
文件末尾 | SEEK_END | 2 |
例如,把位置指針移動到離文件開頭100個字節(jié)處:
fseek(fp, 100, 0);
值得說明的是,fseek() 一般用于二進制文件,在文本文件中由于要進行轉換,計算的位置有時會出錯。
文件的隨機讀寫
在移動位置指針之后,就可以用前面介紹的任何一種讀寫函數(shù)進行讀寫了。由于是二進制文件,因此常用 fread() 和 fwrite() 讀寫。
【示例】從鍵盤輸入三組學生信息,保存到文件中,然后讀取第二個學生的信息。
#include<stdio.h> #define N 3 struct stu{ char name[10]; //姓名 int num; //學號 int age; //年齡 float score; //成績 }boys[N], boy, *pboys; int main(){ FILE *fp; int i; pboys = boys; if( (fp=fopen("d:\\demo.txt", "wb+")) == NULL ){ printf("Cannot open file, press any key to exit!\n"); getch(); exit(1); } printf("Input data:\n"); for(i=0; i<N; i++,pboys++){ scanf("%s %d %d %f", pboys->name, &pboys->num, &pboys->age, &pboys->score); } fwrite(boys, sizeof(struct stu), N, fp); //寫入三條學生信息 fseek(fp, sizeof(struct stu), SEEK_SET); //移動位置指針 fread(&boy, sizeof(struct stu), 1, fp); //讀取一條學生信息 printf("%s %d %d %f\n", boy.name, boy.num, boy.age, boy.score); fclose(fp); return 0; }
運行結果:
Input data:
Tom 2 15 90.5↙
Hua 1 14 99↙
Zhao 10 16 95.5↙
Hua 1 14 99.000000
以上就是對 C語言 文件隨機讀寫的資料整理,后續(xù)繼續(xù)補充相關資料,謝謝大家對本站的支持!
您可能感興趣的文章
- 04-02c語言函數(shù)調用后清空內存 c語言調用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求階乘


閱讀排行
本欄相關
- 04-02c語言函數(shù)調用后清空內存 c語言調用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求
隨機閱讀
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-10C#中split用法實例總結