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

C語言 以數(shù)據(jù)塊的形式讀寫文件詳解及實現(xiàn)代碼

 更新時間:2016年08月25日 08:56:32   投稿:lqh  
本文主要介紹 C語言 以數(shù)據(jù)塊的形式讀寫文件,這里對相關(guān)知識資料做了整理,并附代碼示例,以便大家學習參考,有學習此部分知識的朋友可以參考下

fgets() 有局限性,每次最多只能從文件中讀取一行內(nèi)容,因為 fgets 遇到換行符就結(jié)束讀取。如果希望讀取多行內(nèi)容,需要使用 fread 函數(shù);相應地寫入函數(shù)為 fwrite。

fread() 函數(shù)用來從指定文件中讀取塊數(shù)據(jù)。所謂塊數(shù)據(jù),也就是若干個字節(jié)的數(shù)據(jù),可以是一個字符,可以是一個字符串,可以是多行數(shù)據(jù),并沒有什么限制。fread() 的原型為:

size_t fread ( void *ptr, size_t size, size_t count, FILE *fp );

fwrite() 函數(shù)用來向文件中寫入塊數(shù)據(jù),它的原型為:

size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp );

對參數(shù)的說明:

  1. ptr 為內(nèi)存區(qū)塊的指針,它可以是數(shù)組、變量、結(jié)構(gòu)體等。fread() 中的 ptr 用來存放讀取到的數(shù)據(jù),fwrite() 中的 ptr 用來存放要
  2. 寫入的數(shù)據(jù)。
  3. size:表示每個數(shù)據(jù)塊的字節(jié)數(shù)。
  4. count:表示要讀寫的數(shù)據(jù)塊的塊數(shù)。
  5. fp:表示文件指針。
  6. 理論上,每次讀寫 size*count 個字節(jié)的數(shù)據(jù)。

size_t 是在 stddef.h 頭文件中使用 typedef 定義的數(shù)據(jù)類型,表示無符號整數(shù),也即非負數(shù),常用來表示數(shù)量。

返回值:返回成功讀寫的塊數(shù),也即 count。如果返回值小于 count:

對于 fwrite() 來說,肯定發(fā)生了寫入錯誤,可以用 ferror() 函數(shù)檢測。
對于 fread() 來說,可能讀到了文件末尾,可能發(fā)生了錯誤,可以用 ferror() 或 feof() 檢測。

【示例】從鍵盤輸入一個數(shù)組,將數(shù)組寫入文件再讀取出來。

#include<stdio.h>
#define N 5
int main(){
  //從鍵盤輸入的數(shù)據(jù)放入a,從文件讀取的數(shù)據(jù)放入b
  int a[N], b[N];
  int i, size = sizeof(int);
  FILE *fp;
  if( (fp=fopen("D:\\demo.txt", "rb+")) == NULL ){
    printf("Cannot open file, press any key to exit!\n");
    getch();
    exit(1);
  }
 
  //從鍵盤輸入數(shù)據(jù) 并保存到數(shù)組a
  for(i=0; i<N; i++){
    scanf("%d", &a[i]);
  }
  //將數(shù)組a的內(nèi)容寫入到文件
  fwrite(a, size, N, fp);
  //將文件中的位置指針重新定位到文件開頭
  rewind(fp);
  //從文件讀取內(nèi)容并保存到數(shù)組b
  fread(b, size, N, fp);
  //在屏幕上顯示數(shù)組b的內(nèi)容
  for(i=0; i<N; i++){
    printf("%d ", b[i]);
  }
  printf("\n");
  fclose(fp);
  return 0;
}

運行結(jié)果:

23 409 500 100 222↙
23 409 500 100 222

fwrite()/fread() 函數(shù)直接操作字節(jié),建議使用二進制方式打開文件。請閱讀《C語言中文本文件與二進制文件的區(qū)別》了解更多。

打開 D:\\demo.txt,發(fā)現(xiàn)文件內(nèi)容根本無法閱讀。這是因為我們使用"rb+"方式打開文件,數(shù)據(jù)以二進制形式寫入文件,一般無法閱讀。

數(shù)據(jù)寫入完畢后,位置指針在文件的末尾,要想讀取數(shù)據(jù),必須將文件指針移動到文件開頭,這就是rewind(fp);的作用。更多關(guān)于rewind函數(shù)的內(nèi)容請點擊:C語言rewind函數(shù)。

文件的后綴不一定是 .txt,它可以是任意的,你可以自己命名,例如 demo.ddd、demo.doc、demo.diy 等。

【示例】從鍵盤輸入兩個學生數(shù)據(jù),寫入一個文件中,再讀出這兩個學生的數(shù)據(jù)顯示在屏幕上。

#include<stdio.h>
#define N 2
struct stu{
  char name[10]; //姓名
  int num; //學號
  int age; //年齡
  float score; //成績
}boya[N], boyb[N], *pa, *pb;
int main(){
  FILE *fp;
  int i;
  pa = boya;
  pb = boyb;
  if( (fp=fopen("d:\\demo.txt", "wb+")) == NULL ){
    printf("Cannot open file, press any key to exit!\n");
    getch();
    exit(1);
  }
  //從鍵盤輸入數(shù)據(jù)
  printf("Input data:\n");
  for(i=0; i<N; i++,pa++){
    scanf("%s %d %d %f",pa->name, &pa->num,&pa->age, &pa->score);
  }
  //將數(shù)組 boya 的數(shù)據(jù)寫入文件
  fwrite(boya, sizeof(struct stu), N, fp);
  //將文件指針重置到文件開頭
  rewind(fp);
  //從文件讀取數(shù)據(jù)并保存到數(shù)據(jù) boyb
  fread(boyb, sizeof(struct stu), N, fp);
  //輸出數(shù)組 boyb 中的數(shù)據(jù)
  for(i=0; i<N; i++,pb++){
    printf("%s %d %d %f\n", pb->name, pb->num, pb->age, pb->score);
  }
  fclose(fp);
  return 0;
}

運行結(jié)果:

Input data:
Tom 2 15 90.5↙
Hua 1 14 99↙
Tom  2  15  90.500000
Hua  1  14  99.000000

以上就是對C語言以數(shù)據(jù)塊形式讀取文件的示例和資料整理,后續(xù)繼續(xù)補充相關(guān)資料,謝謝大家對本站的支持!

相關(guān)文章

  • C語言實現(xiàn)簡單彈跳球游戲

    C語言實現(xiàn)簡單彈跳球游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單彈跳球游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言 選擇排序算法詳解及實現(xiàn)代碼

    C語言 選擇排序算法詳解及實現(xiàn)代碼

    本文主要介紹C語言 選擇排序算法,這里對排序算法做了詳細說明,并附代碼示例,有需要的小伙伴可以參考下
    2016-08-08
  • 詳解樹形DP

    詳解樹形DP

    樹形DP是什么?跟其他DP有什么區(qū)別?相信很多初學者在剛剛接觸一種新思想的時候都會有這種問題。沒錯,樹形DP準確的說是一種DP的思想,將DP建立在樹狀結(jié)構(gòu)的基礎(chǔ)上。所以我們結(jié)合具體題目進行講解,希望大家可以在題目中領(lǐng)悟這種思想。
    2021-05-05
  • QT編寫地圖實現(xiàn)獲取區(qū)域邊界

    QT編寫地圖實現(xiàn)獲取區(qū)域邊界

    區(qū)域邊界是一些坐標點集合,而且不同的行政區(qū)劃得到的區(qū)域邊界點數(shù)組集合個數(shù)不同。本文將具體介紹QT在編寫地圖時如何實現(xiàn)獲取區(qū)域邊界,需要的可以參考一下
    2022-01-01
  • Qt使用QPainter繪制3D立方體

    Qt使用QPainter繪制3D立方體

    這篇文章主要為大家詳細介紹了Qt使用QPainter繪制3D立方體,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C++有符號和無符號之間的轉(zhuǎn)換問題

    C++有符號和無符號之間的轉(zhuǎn)換問題

    在開發(fā)中經(jīng)常會遇到有符號和無符號之間的轉(zhuǎn)換問題,如果不清楚問題根源,很難解決bug,今天小編通過本文給大家分享c++有符號無符號轉(zhuǎn)換問題,需要的朋友參考下
    2021-07-07
  • 深入分析C語言存儲類型與用戶空間內(nèi)部分布

    深入分析C語言存儲類型與用戶空間內(nèi)部分布

    這篇文章主要介紹了C語言存儲類型與用戶空間內(nèi)部分布,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • C++?Qt開發(fā)之使用QNetworkAccessManager實現(xiàn)Web網(wǎng)頁訪問

    C++?Qt開發(fā)之使用QNetworkAccessManager實現(xiàn)Web網(wǎng)頁訪問

    Qt?是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,本文主要介紹了如何運用QNetworkAccessManager組件實現(xiàn)Web網(wǎng)頁訪問,需要的可以參考下
    2024-03-03
  • C++中聲明、定義、初始化、賦值區(qū)別介紹

    C++中聲明、定義、初始化、賦值區(qū)別介紹

    在?C++?中,聲明、定義、初始化、賦值是變量的四個基本操作,很多朋友不清楚他們之間有什么區(qū)別,今天通過本文給大家介紹下C++中聲明、定義、初始化、賦值區(qū)別,感興趣的朋友一起看看吧
    2023-05-05
  • 如何利用Matlab繪制出好看的火山圖

    如何利用Matlab繪制出好看的火山圖

    火山圖是散點圖的一種,它將統(tǒng)計測試中的統(tǒng)計顯著性量度和變化幅度相結(jié)合,從而能夠幫助快速直觀地識別那些變化幅度較大且具有統(tǒng)計學意義的數(shù)據(jù)點。本文將通過Matlab繪制好看的火山圖,需要的可以參考一下
    2022-03-03

最新評論