日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件

發布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文件

1.文件:存儲在外部介質上數據的集合

2.文件是有序的數據序列,要訪問文件中的數據,必須按照它們的排列順序,依次訪問

3.系統對文件的處理過程:

(輸入):計算機外存--->緩沖區--->計算機內存

寫(輸出):算機內存--->緩沖區---->計算機外存

4.文件的分類:

①根據在磁盤的存儲格式,分為:

文本文件(TXT/ASCⅡ文件):

? ? ?文本文中保存的數據用ASCⅡ作為存儲方式,先將全部數據轉換為ASCⅡ碼形式,每個ASCⅡ碼占一個字節

? ? ?文本文件使用編輯軟件可以直接閱讀

二進制文件:

? ? ? 將數據在內存中以二進制格式存儲,直接存入文件中

? ? ? 二進制文件使用編輯器軟件不能直接閱讀

②從用戶觀點,分為:

普通文件(磁盤文件):

? ? ? ?以磁盤為對象,無其他特殊性能

特殊文件(標準設備文件/標準I/0文件):

? ? ? ?以終端為對象標準設備文件;

? ? ? ?邏輯文件(設備文件):與主機進行設備交換的輸入輸出設備(即實際的物理設備)

? ? ? ? ? ? 例如:鍵盤作為標準輸入文件:文件名stdin,

? ? ? ? ? ? ? ? ? 顯示器作為標準輸出文件:文件名stdout,

? ? ? ? ? ? ? ? ? 打印機作為輸入文件:文件名PRN

③從c語言對文件的處理方式看,分為:

緩沖文件:?

? ? 對每個正在使用的文件,系統自動在內存中為其開辟一個文件緩沖區(即高級文件操作)

非緩沖文件:

? ? 系統不自動開辟文件緩沖區,由應用程序自己設置(即低級文件操作)

一、文件的處理:

1.文件類型結構:

FILE類型,包括在頭文件stdio.h

文件結構:

typedef struct {short level;//文件緩沖區剩余的字節數unsigned flags;//文件狀態標志char fd;//文件描述符unsigned char hold;//緩沖區滿丟失的字符short bsize; //文件緩沖區大小unsigned char *buffer;//文件緩沖區地址unsigned char *curp;//指針指向當前文件的讀寫位置unsigned istemp;//臨時文件,指示器short token;//用于有效性檢查 }FILE;

2.文件指針變量: ?預包含stdio.h 頭文件,形式 ?FILE *文件型指針變量名

例如:FILE *fp;

fp是一個指針變量指向文件結構,要同時使用多個文件,必須有多個不同的文件指針。

3.c語言中提供了三個標準文件的指針: 標準輸入文件(鍵盤):stdin,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 標準輸出文件(顯示器):stdout,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 標準錯誤輸出文件(顯示器):stderr

二、文件的操作流程

  • 第一步:打開(新建)文件(fopen)
  • 第二步:對文件進行操作(讀或寫)
  • 第三步:關閉文件(fclose)

1.打開文件

fopen函數

函數原型:

  • FILE *fopen(charc *filename,char *mode);

//使用mode模式打開指定的filename文件

//文件打開成功,返回值為FILE類型的指針

//文件打開失敗,返回NULL

調用形式:

fp=fopen (文件名,文件使用方式);

文件名:需要打開的文件名稱(字符串)

例如:

fp=fopen(“e:\\code\\test.txt”,”rt”);//以只讀方式打開路徑為e:/code/est.txt的文件

fp=fopen(“e:/code/test.txt”,”wt”);//以只寫方式打開路徑e:/code/test.txt文件 ? ? ?

fp=fopen("text.txt","r");//只讀的方式打開一個和可執行文件在相同路徑下的文本文件test.txt

文件使用方式;

"r":讀,為讀方式(輸入)打開文件,該文件必須存在,若文件不存在,則返回NULL

"w":寫(輸出)方式打開文本文件,若文件不存在,則建立一個新文件,若文件已存在,則將原來的文件清空

"a":追加,在文本文件的末尾增加數據,若文件存在,則保持原來文件的內容,將新的數據增加到原來的后面;若文件不存在,則返回NULL;

"t":文本文件

"b":二進制文件

"+":讀和寫

文件的其他打開方式:

"r+":對文本文件進行讀/寫文件不存在返回NULL,若文件存在內容不會被清空

"w+":可以文本文件進行讀/寫操作,若文件已存在,則將文件原來的內容清空

"a+":文本文件進行讀/追加操作,文件內容不會清空

"rb+":對二進制文件進行讀/寫操作

"wb+":對二進制文件進行讀/寫操作

"ab+":對二進制文件進行讀/追加操作

常見文件打開操作:

if((fp=fopen("d:\\file.txt","r"))==NULL) {printf("cannot open file.\n");exit(0); }

//以只讀方式打開D盤根目錄下“file.txt”文件,

//文件打開成功,將為該文件的結構的地址返回存入fp

//如果打開文件失敗,fopen函數返回一個空指針exit( ); 函數:0表示程序正常退出,1表示錯誤退出


2.關閉文件:

fclose函數

原型:int fclose (FILE *fp);

調用格式: fclose(fp);

fp:已經打開的文件指針

函數功能:關閉fp指定的文件,切斷緩沖區與該文件的聯系,并釋放文件指針

? ? ? ? ? 若文件關閉成功,返回值0,關閉失敗,返回非0值


三、文件的順序讀寫:

對文件的操作必須按照文件中字符的先后順序進行,從頭到尾主數據讀入或寫出。

字符串輸入輸出函數 ? ? fgetc ?fputc

字符串輸入輸出函數 ? ? fgets ?fputs

格式化輸入輸出函數 ? ? fscanf ?fprintf

數據塊輸入輸出函數 ? ? fread ? fwrite

1.單字符讀寫函數:

  • 讀:int fgetc(FILE *fp);
  • 寫:int fputc(char ch,FILE *fp

調用形式:

?輸入函數:ch=fgetc(fp);

//從指定文件中讀取一個字符,讀取的字符付給變量ch

//對于ASCⅡ文件,若讀取字符時文件已經結束或出錯,返回EOF(-1)

? 輸出函數:fputc(ch,fp);

//將一個字符輸出到指定文件中,即將字符變量ch中的字符輸出到fp所指向的文件

//輸出操作成功,則函數返回輸出的字符,否則返回EOF


2.字符串讀寫函數

  • 讀:char *fgets(char *str,int n,FILE *fp);
  • 寫:int fputs(char *str,FILE *fp);?
調用形式

輸入函數:fgets(s,n,fp);//其中參數:char s[ ]; int n; FIFLE *fp;

//從fp所指向的文件中讀取長度不超過n-1個字符串(串尾為\0),并將該字符串放到字符數組s中,

//函數的返回值為字符數組s的首地址;文件出錯或結束,返回NULL;

//若:已讀入n-1個字符,串尾為\0 ?則:s中存入n-1個字符,串尾為\0

? ? ? 讀入字符遇\0 ? 則:s中存入實際讀入的字符,串尾\0

? ? ? 讀入字符遇見尾文件 ? 則:s中存入實際讀入的字符,EOF不存入數組,串尾\0

? ? ? 當文件已經結束時,繼續文件 ? ?則:函數返回值為空,表示文件結束

例:fgets(s,4,fp) ? ? ? ?

文本文件內容:abcd\n ? ?數組s:abc\0

? ? ? ? ? ? d\nabc ? ? ? ? ? d\n\0 ? ?

? ? ? ? ? ? ? ? ? ?? fEOF ? ? ? ? ? ? f\0 ?

輸出函數:fputs(s,fp);//其中參數:char s[ ];FIFLE *fp;

//將字符數組s中的字符串寫入文件指針fp所指文件中

//輸入成功返回0,失敗返回EOF


3.格式化輸入輸出

輸入:int fscanf(FILE fp,”格式化字符串”,[輸入項地址表]);

輸出:int fprintf(FILE fp,”格式化字符串”,[輸入項地址表]);

調用形式:

?輸入函數:fscanf(fp,格式控制符,變量地址表);//其中參數: FIFLE *fp;

//從fp所指向的ASCⅡ文件中讀取字符,按格式控制符的含義存入對應的變量中,返回值為輸入的數據個數

??輸出函數:fprintf(fp,格式控制符,表達式列表);//其中參數:FIFLE *fp;

//將表達式列表中的數據按照格式控制符的說明,存入fp所指向的ASCⅡ文件,返回值為存入的數據個數


3.數據塊輸入輸出

輸入:int fread(void *buffer,int size,int count,FILE *fp);

輸出:int fwrite(void *buffer,int size,int count,FILE *fp);

調用形式:

?輸入函數:fread(buffer,size,count,fp);

//從二進制文件fp讀取count個數據塊存入buffer中,每個數據塊的大小為size個字節

//操作成功,函數返回值為實際讀入的數據塊數量,文件結束或錯誤,返回值0

?輸入函數:fwrite(buffer,size,count,fp);

//將buffer中count個數據塊寫入二進制文件fp中,每個數據塊的大小為size個字節

//操作成功,函數返回值為實際寫入的數據塊數量,文件結束或錯誤,返回值0

四、文件的隨機讀寫:

1.位置指針返回到頭文件

函數原型:void rewind (FILE *fp);

功能:將文件內部指針移到文件開始位置

2.位置移動指針

函數原型:int fseek(FILE *fp,long off,int whence);

功能:將fp所指文件指針從 whence地址移向offset地址

whence ?0--文件開頭 ?1--文件當前位置 ?2--文件的末尾

3.取位置指針

函數原型:int ftell(FILE *fp); 功能:得到fp所指向文件的當前位置,當出錯時返回-1L;

五、文件檢測:

1.檢測文件結束函數:

函數原型:int feof(FILE *fp);

功能:判斷fp所指文件指針是否位于末尾。是返回1,否返回0

2.檢測文件出錯函數:

檢查數據輸入輸出是否出錯函數

函數原型:int ferror(FILE *fp); 功能:檢查在文件操作時,有沒有出錯。未出錯返回0,出錯返回1.

②清除出錯標記及文件結束標記

函數原型:int clearerr(FILE *fp);功能:清除出錯標記及文件結束標記,使他們值為0


六、函數實例:

#include<stdio.h> #include<stdlib.h> main() { FILE *fp;int i;char s[20],t[20]; gets(s); //從鍵盤輸入一個字符串 fp=fopen("e:\\stu.txt","w");//以寫的方式,打開E盤stu.txt文件for(i=0;s[i]!='\0';i++) fputc(s[i],fp);//遍歷字符串中各個字符通過fputc();寫入文件中fclose(fp);//關閉文件,完成在txt文本文件中的寫操作fp=fopen("e:\\stu.txt","r");//讀的方式打開文件fgets(t,6,fp); //注意字符串讀取末尾帶'\0' 從文件中讀取5個字符加\0存入t數組printf("The first t is :%s\n",t);printf("The current position is:%d\n",ftell(fp));//顯示讀取字符串后的當前指針位置fseek(fp,5,1);//從當前位置向后移動5個字節(4個字符和\0)printf("The current position is:%d\n",ftell(fp));fgets(t,3,fp);printf("The second t is :%s\n",t);rewind(fp);//重置位置指針到開頭位置printf("The current position is:%d\n",ftell(fp));fgets(t,3,fp);printf("The last t is :%s\n",t);fclose(fp); } 輸出結果:
PS:本博客借鑒北京理工大學C語言程序設計和課本總結而成,有錯請指出,謝謝閱讀

總結

以上是生活随笔為你收集整理的文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。