欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言 文件的隨機(jī)讀寫詳解及示例代碼

 更新時(shí)間:2016年08月25日 09:14:08   投稿:lqh  
本文主要介紹C語言 文件的隨機(jī)讀寫,這里整理了相關(guān)資料及示例代碼以便大家學(xué)習(xí)參考,學(xué)習(xí)此部分內(nèi)容的朋友可以參考下

前面介紹的文件讀寫函數(shù)都是順序讀寫,即讀寫文件只能從頭開始,依次讀寫各個(gè)數(shù)據(jù)。但在實(shí)際開發(fā)中經(jīng)常需要讀寫文件的中間部分,要解決這個(gè)問題,就得先移動(dòng)文件內(nèi)部的位置指針,再進(jìn)行讀寫。這種讀寫方式稱為隨機(jī)讀寫,也就是說從文件的任意位置開始讀寫。

實(shí)現(xiàn)隨機(jī)讀寫的關(guān)鍵是要按要求移動(dòng)位置指針,這稱為文件的定位。

文件定位函數(shù)rewind和fseek

移動(dòng)文件內(nèi)部位置指針的函數(shù)主要有兩個(gè),即 rewind() 和 fseek()。

rewind() 用來將位置指針移動(dòng)到文件開頭,前面已經(jīng)多次使用過,它的原型為:

void rewind ( FILE *fp );

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

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

參數(shù)說明:

1) fp 為文件指針,也就是被移動(dòng)的文件。

2) offset 為偏移量,也就是要移動(dòng)的字節(jié)數(shù)。之所以為 long 類型,是希望移動(dòng)的范圍更大,能處理的文件更大。

3) origin 為起始位置,也就是從何處開始計(jì)算偏移量。C語言規(guī)定的起始位置有三種,分別為文件開頭、當(dāng)前位置和文件末尾,

每個(gè)位置都用對(duì)應(yīng)的常量來表示:

起始點(diǎn) 常量名 常量值
文件開頭 SEEK_SET 0
當(dāng)前位置 SEEK_CUR 1
文件末尾 SEEK_END 2

例如,把位置指針移動(dòng)到離文件開頭100個(gè)字節(jié)處:

fseek(fp, 100, 0);

值得說明的是,fseek() 一般用于二進(jìn)制文件,在文本文件中由于要進(jìn)行轉(zhuǎn)換,計(jì)算的位置有時(shí)會(huì)出錯(cuò)。

文件的隨機(jī)讀寫

在移動(dòng)位置指針之后,就可以用前面介紹的任何一種讀寫函數(shù)進(jìn)行讀寫了。由于是二進(jìn)制文件,因此常用 fread() 和 fwrite() 讀寫。

【示例】從鍵盤輸入三組學(xué)生信息,保存到文件中,然后讀取第二個(gè)學(xué)生的信息。

#include<stdio.h>
#define N 3
struct stu{
  char name[10]; //姓名
  int num; //學(xué)號(hào)
  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); //寫入三條學(xué)生信息
  fseek(fp, sizeof(struct stu), SEEK_SET); //移動(dòng)位置指針
  fread(&boy, sizeof(struct stu), 1, fp); //讀取一條學(xué)生信息
  printf("%s %d %d %f\n", boy.name, boy.num, boy.age, boy.score);
  fclose(fp);
  return 0;
}

運(yùn)行結(jié)果:

Input data:
Tom 2 15 90.5↙
Hua 1 14 99↙
Zhao 10 16 95.5↙
Hua  1  14 99.000000

以上就是對(duì) C語言 文件隨機(jī)讀寫的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C++中的Qt?QTableView詳解

    C++中的Qt?QTableView詳解

    這篇文章主要介紹了Qt?QTableView詳解,主要包括常用接口,設(shè)置item屬性,右鍵彈出菜單,結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • C語言系統(tǒng)調(diào)用約定

    C語言系統(tǒng)調(diào)用約定

    這篇文章介紹了C語言系統(tǒng)調(diào)用約定,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值。需要的朋友可以收藏下,方便下次瀏覽觀看
    2021-12-12
  • C++深入刨析muduo中的抽象類Poller

    C++深入刨析muduo中的抽象類Poller

    muduo網(wǎng)絡(luò)庫中Poller類是一個(gè)抽象類,用戶使用PollPoller或者EPollPoller類,下面跟隨小編一起來詳細(xì)了解一下
    2022-04-04
  • C語言實(shí)現(xiàn)文件版通訊錄的代碼分享

    C語言實(shí)現(xiàn)文件版通訊錄的代碼分享

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)一個(gè)文件版通訊錄,主要運(yùn)用了結(jié)構(gòu)體,一維數(shù)組,函數(shù),分支與循環(huán)語句等等知識(shí),需要的可以參考一下
    2023-01-01
  • C++詳細(xì)講解繼承與虛繼承實(shí)現(xiàn)

    C++詳細(xì)講解繼承與虛繼承實(shí)現(xiàn)

    這篇文章主要介紹了Java中的繼承詳情,繼承是面向?qū)ο笕筇卣髦?,可以使得子類具有父類的屬性和方法,還可以在子類中重新定義,以及追加屬性和方法,下文介紹需要的朋友可以參考下
    2022-04-04
  • C語言 存儲(chǔ)類詳解及示例代碼

    C語言 存儲(chǔ)類詳解及示例代碼

    本篇文章主要介紹C語言 存儲(chǔ)類,這里幫大家整理了存儲(chǔ)類的基礎(chǔ)資料,并提供示例代碼和詳細(xì)介紹,有興趣的小伙伴可以參考下
    2016-08-08
  • c語言實(shí)現(xiàn)php的trim標(biāo)簽

    c語言實(shí)現(xiàn)php的trim標(biāo)簽

    本文給大家介紹的是使用C語言實(shí)現(xiàn)php的trim標(biāo)簽功能的代碼,非常的實(shí)用,其主要作用是清除字符串開頭結(jié)尾除空白,有需要的小伙伴可以參考下。
    2016-01-01
  • QT?.pro文件使用解析

    QT?.pro文件使用解析

    QT工程的pro文件,在創(chuàng)建工程時(shí)由QTCreater自動(dòng)創(chuàng)建,我們可以往里面添加內(nèi)容,增加庫文件的聲明,包含路徑、預(yù)處理器定義,生成目錄,輸出中間目錄等等設(shè)置,本文就來介紹一下
    2022-04-04
  • 利用C語言實(shí)現(xiàn)2048小游戲的方法

    利用C語言實(shí)現(xiàn)2048小游戲的方法

    2048是比較流行的一款數(shù)字游戲,相信對(duì)大家來說都不陌生,這篇文章給大家分享了利用C語言實(shí)現(xiàn)2048小游戲的方法,對(duì)大家學(xué)習(xí)理解C語言具有一定的參考借鑒價(jià)值,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • C語言數(shù)組棧實(shí)現(xiàn)模板

    C語言數(shù)組棧實(shí)現(xiàn)模板

    這篇文章主要為大家詳細(xì)介紹了C語言數(shù)組棧實(shí)現(xiàn)模板,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評(píng)論