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

C語(yǔ)言rewind與fseek函數(shù)之隨機(jī)讀寫(xiě)文件的用法詳解

 更新時(shí)間:2021年09月07日 10:01:06   投稿:xusong  
這篇文章主要介紹了C語(yǔ)言rewind與fseek函數(shù)之隨機(jī)讀寫(xiě)文件的用法詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

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

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

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

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

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

void rewind ( FILE *fp );

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

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

參數(shù)說(shuō)明:

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

2) offset 為偏移量,也就是要移動(dòng)的字節(jié)數(shù)。之所以為 long 類(lèi)型,是希望移動(dòng)的范圍更大,能處理的文件更大。offset 為正時(shí),向后移動(dòng);offset 為負(fù)時(shí),向前移動(dòng)。

3) origin 為起始位置,也就是從何處開(kāi)始計(jì)算偏移量。C語(yǔ)言規(guī)定的起始位置有三種,分別為文件開(kāi)頭、當(dāng)前位置和文件末尾,每個(gè)位置都用對(duì)應(yīng)的常量來(lái)表示:

起始點(diǎn) 常量名 常量值
文件開(kāi)頭 SEEK_SET 0
當(dāng)前位置 SEEK_CUR 1
文件末尾 SEEK_END 2
例如,把位置指針移動(dòng)到離文件開(kāi)頭100個(gè)字節(jié)處:
fseek(fp, 100, 0);

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

文件的隨機(jī)讀寫(xiě)

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

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

#include<stdio.h>

#define N 3

struct stu{
    char name[10]; //姓名
    int num;  //學(xué)號(hào)
    int age;  //年齡
    float score;  //成績(jī)
}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);  //寫(xiě)入三條學(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

到此這篇關(guān)于C語(yǔ)言rewind與fseek函數(shù)之隨機(jī)讀寫(xiě)文件的用法詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言rewind與fseek函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++解析obj模型文件方法介紹

    C++解析obj模型文件方法介紹

    由于本人打算使用Assimp來(lái)加載模型,這里記錄一下tinyobjloader庫(kù)的使用。之前也研究過(guò)fbxsdk,除了骨骼動(dòng)畫(huà)暫未讀取外,代碼自認(rèn)為還算可靠
    2022-09-09
  • OpenCV+Qt實(shí)現(xiàn)圖像處理操作

    OpenCV+Qt實(shí)現(xiàn)圖像處理操作

    這篇文章主要為大家詳細(xì)介紹了OpenCV+Qt實(shí)現(xiàn)圖像處理操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語(yǔ)言中g(shù)etchar()函數(shù)的用法小結(jié)

    C語(yǔ)言中g(shù)etchar()函數(shù)的用法小結(jié)

    這篇文章主要介紹了C語(yǔ)言中g(shù)etchar()函數(shù)的用法,getchar是輸入函數(shù),輸入的過(guò)程是什么呢,本文給大家詳細(xì)講解,對(duì)C語(yǔ)言getchar()函數(shù)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-10-10
  • 詳解如何將c語(yǔ)言文件打包成exe可執(zhí)行程序

    詳解如何將c語(yǔ)言文件打包成exe可執(zhí)行程序

    這篇文章主要介紹了詳解如何將c語(yǔ)言文件打包成exe可執(zhí)行程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 深入解析C++中的字符數(shù)組和處理字符串的方法

    深入解析C++中的字符數(shù)組和處理字符串的方法

    這篇文章主要介紹了深入解析C++中的字符數(shù)組和處理字符串的方法,需要的朋友可以參考下
    2015-09-09
  • c語(yǔ)言 字符串的拼接和分割實(shí)例

    c語(yǔ)言 字符串的拼接和分割實(shí)例

    今天小編就為大家分享一篇c語(yǔ)言 字符串的拼接和分割實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • C語(yǔ)言水仙花數(shù)的實(shí)現(xiàn)

    C語(yǔ)言水仙花數(shù)的實(shí)現(xiàn)

    這篇文章主要介紹了C語(yǔ)言水仙花數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C++類(lèi)成員構(gòu)造函數(shù)和析構(gòu)函數(shù)順序示例詳細(xì)講解

    C++類(lèi)成員構(gòu)造函數(shù)和析構(gòu)函數(shù)順序示例詳細(xì)講解

    這篇文章主要介紹了C++類(lèi)成員構(gòu)造和析構(gòu)順序示例,看了這個(gè)例子大家就可以明白c++構(gòu)造析構(gòu)的奧秘
    2013-11-11
  • C語(yǔ)言的getc()函數(shù)和gets()函數(shù)的使用對(duì)比

    C語(yǔ)言的getc()函數(shù)和gets()函數(shù)的使用對(duì)比

    這篇文章主要介紹了C語(yǔ)言的getc()函數(shù)和gets()函數(shù)的使用對(duì)比,從數(shù)據(jù)流中一個(gè)是讀取字符一個(gè)是讀取字符串,需要的朋友可以參考下
    2015-08-08
  • C++中const修飾符的詳解及其作用介紹

    C++中const修飾符的詳解及其作用介紹

    這篇文章主要介紹了C++中const修飾符的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評(píng)論