C語言文件知識_第1頁
C語言文件知識_第2頁
C語言文件知識_第3頁
C語言文件知識_第4頁
C語言文件知識_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、C語言文件知識C語言文件ppt.根據(jù)數(shù)據(jù)的組織形式,數(shù)據(jù)文件可分為根據(jù)數(shù)據(jù)的組織形式,數(shù)據(jù)文件可分為ASCII文件和二進制文件。文件和二進制文件。整數(shù)整數(shù)13297在內(nèi)存中的存儲形式以及分別按在內(nèi)存中的存儲形式以及分別按ASCII碼形式和二進制形式輸出如碼形式和二進制形式輸出如下圖所示:下圖所示:文件標識包括三部分:文件標識包括三部分:(1)文件路徑文件路徑;(2)主文件名主文件名;(3)文件后綴。文件后綴。文件路徑表示文件在外部存儲設備中的位置。文件路徑表示文件在外部存儲設備中的位置。 如:如: d: cc temp file1 . dat 文件路徑文件路徑 主文件名主文件名 文件后綴文件后

2、綴主文件名的命名規(guī)則主文件名的命名規(guī)則; ;后綴用來表示文件的性質,一般不超過后綴用來表示文件的性質,一般不超過3 3個字母。個字母。如:如:.doc (Word .doc (Word 文件文件) ),.txt (.txt (文本文件文本文件) ),.dat (.dat (數(shù)據(jù)文件數(shù)據(jù)文件) ) 。程序數(shù)據(jù)區(qū)輸出文件緩沖區(qū)輸出輸入輸入文件緩沖區(qū)輸出輸入磁盤內(nèi)存內(nèi)存文件名文件使用方式文件類型指針C程序操作系統(tǒng)磁盤在緩沖文件系統(tǒng)中,每個被使用的文件都要在內(nèi)存中開辟一個在緩沖文件系統(tǒng)中,每個被使用的文件都要在內(nèi)存中開辟一個FILE類型的文件類型的文件信息區(qū),存放文件的有關信息信息區(qū),存放文件的有關信

3、息(文件名、文件狀態(tài)、文件當前位置等文件名、文件狀態(tài)、文件當前位置等)。(1)打開文件)打開文件(2)文件讀寫)文件讀寫(3)關閉文件)關閉文件 文件操作的步驟文件操作的步驟文件地址含有字符文件地址含有字符“”時一定要注意,因為時一定要注意,因為C語言會把字符語言會把字符看成轉義字符的開始標看成轉義字符的開始標志,如寫成志,如寫成fopen(c:c_programetest8-1.txt,r),會發(fā)生文件找不到的問,會發(fā)生文件找不到的問題,因為編譯器會把題,因為編譯器會把c看成轉意字符(看成轉意字符(c不是有效的轉意字符,含義未定義)。不是有效的轉意字符,含義未定義)。有兩種方法可以解決這一問

4、題,一種方法是用雙斜杠有兩種方法可以解決這一問題,一種方法是用雙斜杠代替單斜杠代替單斜杠如上面的如上面的地址所示。另一種方法是用斜杠地址所示。另一種方法是用斜杠/代替反斜杠代替反斜杠,如上面的路徑可寫成,如上面的路徑可寫成fopen(c:/c_programe/test8-1.txt,r)。例如:例如:FILE *fp; fp=fopen(c:c_programetest8-1.txt,r);FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Ca

5、nnot open file of %s.n,file); exit (0); else return fp;為了以后方便打開文件并且判斷是否正確打開文件,可將以上過為了以后方便打開文件并且判斷是否正確打開文件,可將以上過程定義成函數(shù),打開文件時調(diào)用該函數(shù)即可。程定義成函數(shù),打開文件時調(diào)用該函數(shù)即可。磁盤文件輸出文件緩沖區(qū)輸入文件緩沖區(qū)程序數(shù)據(jù)區(qū)a緩沖文件系統(tǒng):不關閉文件可能會丟失數(shù)據(jù)1).1).用用fputcfputc函數(shù)向文件寫入一個字符函數(shù)向文件寫入一個字符 調(diào)用形式調(diào)用形式: fputc ( ch: fputc ( ch,fp ) fp ) ; 函數(shù)功能函數(shù)功能: : 將字符(將字符(

6、chch的值)輸出到的值)輸出到fpfp所指向的文件中去。所指向的文件中去。 返返 回回 值值: : 如果輸出成功,則返回值就是輸出的字符;如果輸出成功,則返回值就是輸出的字符; 如果輸出失敗,則返回一個如果輸出失敗,則返回一個EOFEOF。1.字符讀寫函數(shù)字符讀寫函數(shù)fgetc三和三和fputc三三從鍵盤輸入字符串,將該字符串加密后存儲到磁盤文件中,當輸入字符從鍵盤輸入字符串,將該字符串加密后存儲到磁盤文件中,當輸入字符“”時停止輸入。時停止輸入。#include main( ) FILE *fp; char ch; fp=fopenfun(file.txt,w); while ( (ch=

7、getchar( ) != ) /* 判斷輸入的是否為結束標志判斷輸入的是否為結束標志 */ ch=ch; /* 對輸入的字符按位取反加密對輸入的字符按位取反加密*/ fputc(ch, fp); /* 讀入的字符寫入磁盤文件讀入的字符寫入磁盤文件 */ fclose(fp); /* 關閉磁盤文件關閉磁盤文件 */FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0);

8、else return fp;2). 用用fgetc函數(shù)從文件讀入一個字符函數(shù)從文件讀入一個字符調(diào)用形式調(diào)用形式: ch= fgetc ( fp ) ; 函數(shù)功能函數(shù)功能: 從指定的文件中讀取一個字符到變量從指定的文件中讀取一個字符到變量ch中。中。 返返 回回 值值: 如讀取成功,返回讀取的字符,如果在執(zhí)行如讀取成功,返回讀取的字符,如果在執(zhí)行fgetc函數(shù)讀字符時函數(shù)讀字符時遇到文件結束符,函數(shù)返回一個文件結束標志遇到文件結束符,函數(shù)返回一個文件結束標志EOF(即即-1)。 1.字符讀寫函數(shù)字符讀寫函數(shù)fgetc三和三和fputc三三在屏幕上顯示磁盤文件解密后的內(nèi)容。在屏幕上顯示磁盤文件解

9、密后的內(nèi)容。#include main ( ) FILE *fp; char ch; fp = fopenfun (file.txt,r); /* 打開文件打開文件 */ while ( ( ch = fgetc(fp) )!=EOF) /* 從文件中讀字符從文件中讀字符 */ ch=ch; /* 對讀取的字符按位取反解密對讀取的字符按位取反解密*/ putchar(ch); /* 顯示從文件讀入的字符顯示從文件讀入的字符 */ fclose (fp); /* 關閉文件關閉文件 */FILE *fopenfun(char *file,char *model) FILE *fp; if ( (

10、fp = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else return fp;2.字符串讀寫函數(shù)字符串讀寫函數(shù)fgets三和三和fputs三三例例7:將鍵盤輸入的若干行字符串存入磁盤文件中。:將鍵盤輸入的若干行字符串存入磁盤文件中。#include #include main( ) FILE *fp; char str81; int n,i; fp=fopenfun(“d:file.txt, w); printf(請輸入您想輸入的字符串個數(shù):請輸入您想輸入的字符串個數(shù):n

11、); scanf(%d%*c,&n); printf(請輸入字符串:請輸入字符串:n); for(i=0; in; i+ ) gets(str); fputs(str, fp);/*將該字符串送入磁盤文件中去將該字符串送入磁盤文件中去 */ fputs(n, fp); /*給字符串末尾存入回車換行符給字符串末尾存入回車換行符*/ fclose (fp);/* 操作結束關閉磁盤文件操作結束關閉磁盤文件 */FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL )

12、printf (Cannot open file of %s.n,file); exit (0); else return fp;2.字符串讀寫函數(shù)字符串讀寫函數(shù)fgets三和三和fputs三三例例8:從鍵盤輸入文件名,在屏幕上顯示該文件內(nèi)容:從鍵盤輸入文件名,在屏幕上顯示該文件內(nèi)容。#include #include void main( ) FILE * fp; char file20, str80; int i=0; printf (Enter filename:); scanf(%s,file); fp = fopenfun (file, r);/* 打開文件打開文件 */ while

13、 ( !feof(fp) ) fgets( str,80,fp );/*從文件中讀出字符串從文件中讀出字符串 */ printf (%s, str); fclose (fp);FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else return fp;#include #include void main ( ) FILE *fp1, *fp2; char f

14、ile120, file220, s10; printf (Enter filename1:); scanf(%s,file1); printf (Enter filename2:); scanf(%s,file2); fp1 = fopenfun (file1, r); /* 打開文本文件打開文本文件1 */ fp2 = fopenfun (file2, w); /* 打開文本文件打開文本文件2 */ while (!feof(fp1) fgets( s,10,fp1 );/* 從文件從文件fp1中讀出字符串中讀出字符串 */ fputs( s, fp2 ); /* 將字符串寫入文件將字符串

15、寫入文件fp2中中 */ fclose (fp1); fclose (fp2);例例9:復制文本文件。:復制文本文件。FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else return fp;例:例: fprintf(fp,”%d,%6.2f”,i,t); fscanf (fp,”%d,%f”,&i,&t);3.格式讀寫函數(shù)格式讀寫函數(shù)fsc

16、anf三和三和fprintf三三#include #include typedef struct Character char name32; int age; char skill32; CHARACTER;int main三三 FILE *fp; char *in_file_name = swordsman.txt; CHARACTER tmp; fp = fopenfun(in_file_name, w); scanf(%s, ); while(strcmp(, * )!=0) scanf(%d %s, &tmp.age, tmp.skill);

17、fprintf(fp, %s %d %sn, , tmp.age, tmp.skill); scanf(%s, ); fclose(fp); return 0;例例10:從鍵盤輸入劍客檔案資料,包括姓名,年齡和技能三項內(nèi)容,將它們寫入文件中保存,:從鍵盤輸入劍客檔案資料,包括姓名,年齡和技能三項內(nèi)容,將它們寫入文件中保存,當輸入當輸入*時停止輸入。時停止輸入。FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Can

18、not open file of %s.n,file); exit (0); else return fp;#include #include typedef struct Character char name32; int age; char skill32; CHARACTER;int main三三 FILE *fp; char *in_file_name = swordsman.txt; CHARACTER tmp; fp = fopenfun(in_file_name, r); while( !feof(fp) ) fscanf(fp,%s %d %s,,&t

19、mp.age, tmp.skill); printf(%s %d %sn, , tmp.age, tmp.skill); fclose(fp); return 0;例例11 將上題所寫的文件讀出顯示在屏幕上將上題所寫的文件讀出顯示在屏幕上。FILE *fopenfun(char *file,char *model) FILE *fp; if ( ( fp = fopen (file, model) ) = NULL ) printf (Cannot open file of %s.n,file); exit (0); else return fp;1.數(shù)據(jù)塊讀寫函數(shù)數(shù)據(jù)塊讀寫函

20、數(shù)fread三和三和fwrite三三例 float f2; FILE *fp; for(i=0;i2;i+) scanf(%f,&fi); fp=fopen(aa.dat, wb); fwrite(f,4,2,fp);例例 struct student int num; char name20; char sex; int age; stud3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20; for(i=0;i3;i+) fwrite(&studi,sizeof(struct student),1,fp

21、);#include #include struct student int num; char name20; char sex; int age; stud3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20; void main三三 FILE *fp; int i; if (fp=fopen(d:ex8-4-1.txt,wb)=NULL) printf(Cannot open file); exit(1); for(i=0;i3;i+) fwrite(&studi,sizeof(struct student)

22、,1,fp); fclose(fp); 例例12:fwrite(sam,sizeof(sam),1,fp)fwrite(sam,sizeof(sam),1,fp)語語句中,從句中,從sizeof(sam)sizeof(sam)可以看出數(shù)據(jù)塊是以整可以看出數(shù)據(jù)塊是以整個數(shù)組為單位的,故數(shù)據(jù)塊個數(shù)為個數(shù)組為單位的,故數(shù)據(jù)塊個數(shù)為1 1; fwrite(sam,sizeof(int),10,fp);fwrite(sam,sizeof(int),10,fp);數(shù)據(jù)塊就以一個整數(shù)為單位,這時,數(shù)數(shù)據(jù)塊就以一個整數(shù)為單位,這時,數(shù)據(jù)塊個數(shù)應該是據(jù)塊個數(shù)應該是1010。如:文件以二進制形式打開如:文件以二進

23、制形式打開 fread(f,4,2,fp); 此語句從此語句從fp所指向的文件中讀入所指向的文件中讀入2個個4個字節(jié)的數(shù)據(jù),存儲到數(shù)組個字節(jié)的數(shù)據(jù),存儲到數(shù)組 f 中。中。1.數(shù)據(jù)塊讀寫函數(shù)數(shù)據(jù)塊讀寫函數(shù)fread三和三和fwrite三三例 float f2; FILE *fp; fp=fopen(aa.dat, rb); fread(f,4,2,fp);for(i=0;i2;i+) fread(&fi,4,1,fp);例例 struct student int num; char name20; char sex; int age; float score3; stud10; for

24、(i=0;i10;i+) fread(&studi,sizeof(struct student),1,fp);#include #include struct student int num; char name20; char sex; int age; stud3;void main三三 FILE *fp; int i; if (fp=fopen(d:ex8-4-1.txt,rb)=NULL) printf(Cannot open file); exit(1); for(i=0;i3;i+) fread(&studi,sizeof(struct student),1,fp)

25、; printf(%d %s %c %dn,studi.num,,studi.sex,studi.age); fclose(fp); 例例1 4: 上 面 例 子 的 完 整 程 序: 上 面 例 子 的 完 整 程 序先寫后讀的例子#include #include FILE *fp;void main三 int b5=1,2,3,4,5,a5,i; if (!(fp=fopen(d:ex8-4.dat,w+b) printf(Cannot open filen); exit(1); fwrite(b,sizeof(int),5,fp); rewind(fp); frea

26、d(a,sizeof(int),5,fp); fclose(fp); for(i=0;i5;i+) printf(%d ,ai); 例例16 從鍵盤輸入從鍵盤輸入4個學生數(shù)據(jù),把它們轉存到磁盤文件中去個學生數(shù)據(jù),把它們轉存到磁盤文件中去(10-5.c)#include #define SIZE 4struct student_type char name10; int num; int age; char addr30;studSIZE;main三三 int i; for(i=0;iSIZE;i+)scanf(%s%d%d%s,,&studi.num, &s

27、tudi.age,studi.addr); save三三; display三三;void save三三 FILE *fp; int i; if(fp=fopen(d:stu_dat,wb)=NULL) printf(cannot open filen); return; for(i=0;iSIZE;i+) if(fwrite(&studi,sizeof(struct student_type),1,fp)!=1) printf(file write errorn); fclose(fp);void display三三 FILE *fp; int i; if(fp=fopen(d:stu_dat,rb)=NULL) printf(cannot open filen); return; for(i=0;iSIZE;i+) fread(&studi,sizeof(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論