C語言 檔案的隨機讀寫詳解及範例程式碼_C 語言

來源:互聯網
上載者:User

前面介紹的檔案讀寫函數都是順序讀寫,即讀寫檔案只能從頭開始,依次讀寫各個資料。但在實際開發中經常需要讀寫檔案的中間部分,要解決這個問題,就得先移動檔案內部的位置指標,再進行讀寫。這種讀寫方式稱為隨機讀寫,也就是說從檔案的任意位置開始讀寫。

實現隨機讀寫的關鍵是要按要求移動位置指標,這稱為檔案的定位。

檔案定位函數rewind和fseek

移動檔案內部位置指標的函數主要有兩個,即 rewind() 和 fseek()。

rewind() 用來將位置指標移動到檔案開頭,前面已經多次使用過,它的原型為:

void rewind ( FILE *fp );

fseek() 用來將位置指標移動到任意位置,它的原型為:

int fseek ( FILE *fp, long offset, int origin );

參數說明:

1) fp 為檔案指標,也就是被移動的檔案。

2) offset 為位移量,也就是要移動的位元組數。之所以為 long 類型,是希望移動的範圍更大,能處理的檔案更大。

3) origin 為起始位置,也就是從何處開始計算位移量。C語言規定的起始位置有三種,分別為檔案開頭、當前位置和檔案末尾,

每個位置都用對應的常量來表示:

起始點 常量名 常量值
檔案開頭 SEEK_SET 0
當前位置 SEEK_CUR 1
檔案末尾 SEEK_END 2

例如,把位置指標移動到離檔案開頭100個位元組處:

fseek(fp, 100, 0);

值得說明的是,fseek() 一般用於二進位檔案,在文字檔中由於要進行轉換,計算的位置有時會出錯。

檔案的隨機讀寫

在移動位置指標之後,就可以用前面介紹的任何一種讀寫函數進行讀寫了。由於是二進位檔案,因此常用 fread() 和 fwrite() 讀寫。

【樣本】從鍵盤輸入三組學生資訊,儲存到檔案中,然後讀取第二個學生的資訊。

#include<stdio.h>#define N 3struct 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語言 檔案隨機讀寫的資料整理,後續繼續補充相關資料,謝謝大家對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.