所謂流式文件是指:用字符串方式存儲信息。如最常用的文本文件。
從存儲方式上來看,文件可以分爲文本文件和二進制文件。
下面將具體介紹文件的相關知識:
1.文件指針:定義文件指針的一般方式爲:FILE *fp 其中fp爲指針變量標識符,FILE必須大寫。
2.文件的打開和關閉:
文件打開
模板:FILE *fp=fopen(const char *path,const char *mode)
if(fp==NULL)
printf("failed!");
else
//處理語句;
文件關閉:
int fclose(*fp)
關閉文件,如果成功返回0,否則關閉失敗。
3.文件讀寫
char ch=fgetc(fp)
char ch=getc(f)
上述兩個函數功能一樣,從文件中讀取數據,讀取是按照字節進行的,系統自動分配一個指針,每次讀取完畢,自動向後移動一個字節。
putc('a',fp)和fputc('a',fp)函數的功能也是一樣的,向文件中加入一個字符。文件首先要打開,可以以寫、讀寫、追加方式打開,如果以前兩種方式打開,則原內容被覆蓋。
字符串讀寫函數:fputs(字符串,文件指針)和fgets(字符數組名,n,文件指針).其中n是一個正整數,表示從文件中讀出的字符串不超過n-1個,在讀入的最後一個字符後追加結束標誌“\0”。
測試代碼:
#include<stdio.h> #include"stdlib.h" void main() { FILE *fp; char ch; printf("Please input a string\n"); fp=fopen("D:\\a.txt","w"); if(fp==NULL) { printf("打開文件失敗!\n"); exit(1); } ch=getchar();//文件寫入 while(ch!='\n') { fputc(ch,fp); ch=getchar(); } fclose(fp); //文件讀取 fp=fopen("D:\\a.txt","r"); ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); } fclose(fp); }
4.文件格式化輸入和輸出
fscanf(fp,"%d,%d....",a,b,...)
fprintf(fp,"%d,%d....",a,b,...)
5.數據塊的讀寫函數
fread和fwrite函數可以用來讀寫一組數據(一個數組元素,結構體變量)
模板:
fread(buffer,size,count,fp)
fwrite(buffer,size,count,fp)
其中,buffer是一個指針,在fread中,表示存放輸入數據的首地址,在fwrite中,表示存放輸出數據的首地址。size表示塊的大小,count表示要讀寫的數據塊的塊數。fp表示文件指針。
6.字的輸入輸出函數,一次讀寫一個word。
int getw(FILE *fp);如果讀取成功返回讀取信息,否則返回EOF。
int putw(int w,FILE *fp);如果成功,寫入w,否則返回EOF。
7.文件刪除
使用remove(文件名字)刪除文件,如果成功返回0.
#include<stdio.h> void main() { char address[20]; printf("please input the address of the file you want to delete:"); gets(address); if(remove(address)==0) printf("success!\n"); else printf("failed"); }
8.重命名文件
使用rename(舊文件名,新文件名)函數進行文件重新命名。程序實例如下:
#include<stdio.h> void main() { char oldaddress[20]; char newaddress[20]; printf("please input the oldaddress of the file :"); gets(oldaddress); printf("please input the newaddress you want to rename:"); gets(newaddress); if(rename(oldaddress,newaddress)==0) printf("success!\n"); else printf("failed"); }
注意:更名前後文件的路徑是處於同一目錄下,心文件名不可以和文件路徑下的其他文件重命。
9.實現文件複製
學了文件的打開,操作之後,現在實現對文件的複製,實例如下:
#include<stdio.h> void main() { char yuanfile[30]; char xinfile[30]; FILE *fp1; FILE *fp2; char ch; printf("please input the name of yuanfile:"); gets(yuanfile); printf("please input the name of xinfile:"); gets(xinfile); if((fp1=fopen(xinfile,"w"))==NULL) printf("failed!\n"); if((fp2=fopen(yuanfile,"r"))==NULL) printf("failed!\n"); ch=fgetc(fp2); while(ch!=EOF) { fputc(ch,fp1); ch=fgetc(fp2); } fclose(fp2); fclose(fp1);
}