Ⅰ C語言下提供了哪些有關文件的操作
1,兩種文件存取方式(輸入,輸出方式)
順序存取
直接存取
2,數據的兩種存放形式
文本文件
二進制文件
13.2文件指針
定義文件類型指針變數的一般形式:
FILE *指針變數名;
例如:
FILE *fp1,*fp2;
13.3打開文件
在使用文件之前,需打開文件.在C里使用fopen函數打開文件.格式為:
fopen(文件名,文件使用方式);
此函數返回一個指向FILE類型的指針.如:
FILE *fp;
fp=fopen("file_1","r");
如果調用成功,fp就指向file_1,否則返回為NULL,所以為了保證文件的正確使用,要進行測試.採用如下語句:
If((fp=fopen("file_1","r"))==NULL)
{
printf("Cannot open this file\n");
exit(0);
}
最常用的文件使用方式及其含義如下:
1,"r".為讀而打開文本文件.(不存在則出錯)
2,"rb".為讀而打開二進制文件.
3,"w".為寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內容將被覆蓋)
4,"wb".為寫而打開二進制文件.
5,"a".為在文件後面添加數據而打開文本文件.(若不存在,則新建;反之,在原文件後追加)
6,"ab".為在文件後面添加數據而打開一個二進制文件.
最常用的文件使用方式及其含義如下:
7,"r+".為讀和寫而打開文本文件.(讀時,從頭開始;在寫數據時,新數據只覆蓋所佔的空間,其後不變)
8,"rb+".為讀和寫而打開二進制文件.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
9,"w+".首先建立一個新文件,進行寫操作,隨後可以從頭開始讀.(若文件存在,原內容將全部消失)
10,"wb+".功能與"w+"同.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
最常用的文件使用方式及其含義如下:
11,"a+".功能與"a"相同;只是在文件尾部添加新的數據後,可以從頭開始讀.
12,"ab+".功能與"a+"相同;只是在文件尾部添加新數據之後,可以由位置函數設置開始讀的起始位置.
13.4關閉文件
當文件的讀寫操作完成之後,使用fclose函數關閉文件.格式如下:
fclose(文件指針)
如:fclose(fp);
13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出
1,調用putc(或fputc)函數輸出一個字元
調用形式為:
putc(ch,fp);
功能是:將字元ch寫到文件指針fp所指的文件中去.當輸出成功,putc函數返回所輸出的字元;否則,返回一個EOF值.EOF是在stdio.h庫
函數文件中定義的符號常量,其值等於-1.
13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出
例如:把從鍵盤輸入的文本按原樣輸出到名為file_1.dat文件中,用字元@作為鍵盤輸入結束標志.
#include
Void main()
{
FILE *fpout;
char ch;
if(fpout=fpopen("file_1","w")==NULL)
{
printf("Cannot open this file!\n");
exit(0);
}
ch=getchar();
while(ch!='@')
{ fputc(ch,fpout); ch=getchar(); }
fclose(fpout);
}
2.調用getc(或fgetc)函數輸入一個字元
調用形式為:
ch=getc(pf);
功能是:從pf指定的文件中讀如一個字元,並把它作為函數值返回.
例如:把一個已存在磁碟上的file_1.dat文本文件中的內容,原樣輸出到終端屏幕上.
#include
void main(){
FILE *fpin;
char ch;
if((fpin=fopen("file_1.dat","r"))==NULL)
{ printf("Cann't open this file!\n");exit(0);}
ch=fgetc(fpin);
while (ch!=EOF)
{ putchar(ch); ch=fgetc(fpin);}
fclose(fpin);
}
13.6判斷文件結束函數feof
EOF可以作為文本文件的結束 標志,但不能作為二進制文件的結束符.feof函數既可以判斷二進制文件,又可以判斷文本文件.
例:編寫程序,用於把一個文本文件(源)復制到另一個文件(目的)中,源文件名和目的文件名由命令行輸入.命令形式如下:
可執行程序名 源文件名 目的文件名
#include
void file(FILE* ,FILE *);
void main(int argc,char *argv[]){
FILE *fpin,*fpout;
if(argc==3)
{ fpin=fopen(argv[1],"r");
fpout=fopen(argv[2],"w");
file(fpin,fpout);
fclose(fpin);fclose(fpout);
}
else if(argc>3)
printf("The file names too many!!\n";
else
printf("There are no file names for input or output!!\n );
}
void file(FILE *fpin,FILE *fpout)
{
char ch;
ch=getc(fpin);
while(!feof(fpin))
{putc(ch,fpout); ch=getc(fpin);}
}
13.7fscanf函數和fprintf函數
1,fscanf函數
fscanf只能從文本文件中按格式輸入,和scanf函數相似,只不過輸入的對象是磁碟上文本文件中的數據.調用形式為:
fscanf(文件指針,格式控制字元串,輸入項表)
例如:fscanf(fp,"%d%d",&a,&b);
fscanf(stdin,"%d%d",&a,&b);
等價於scanf("%d%d",&a,&b);
3.fprintf函數
fprintf函數按格式將內存中的數據轉換成對應的字元,並以ASCII代碼形式輸出到文本文件中.Fprintf函數和printf函數相似,只是
將輸出的內容按格式存放到磁碟的文本文件中.調用形式如下:
fprintf(文件指針,格式控制字元串,輸出項表)
如:fprintf(fp,"%d %d",x,y);
以下語句 fprintf(stdout,"%d %d",x,y)
13.8fgets函數和fputs函數
1,fgets函數
fgets函數用來從文件中讀入字元串.調用形式如下:
fgets(str,n,fp);
函數功能是:從fp所指文件中讀入n-1個字元放入str為起始地址的空間內;如果在未讀滿n-1個字元時,則遇到換行符或一個EOF結束本次讀操作,
並已str作為函數值返回.
13.8fgets函數和fputs函數
2,fputs函數
fput函數把字元串輸出到文件中.函數調用形式如下:
fputs(str,fp);
注意:為了便於讀入,在輸出字元串時,應當人為的加諸如"\n"這樣的字元串.
13.9fread函數和fwrite函數
fread and fwrite函數用來讀,寫二進制文件.它們的調用形式如下:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:要輸入或輸出的數據塊的首地址
count:每讀寫一次,輸入或輸出數據塊的個數
size:每個數據塊的位元組數
fp:文件指針
13.9fread函數和fwrite函數
例如有如下結構體:
struct st{
char num[8];
float mk[5];
}pers[30];
以下循環將把這30個元素中的數據輸出到fp所指文件中.
for(i=0;i<30;i++)
fwrite(&pers[i],sizeof(struct st),1,fp);
13.9fread函數和fwrite函數
以下語句從fp所指的文件中再次將每個學生數據逐個讀入到pers數組中.
i=0;
fread(&pers[i],sizeof(struct st),1,fp);
while(!feof(fp))
{ i++;
fread(&pers[i],sizeof(struct st),1,fp);
}
13.10文件定位函數
1,fseek函數
fseek函數用來移動文件位置指針到指定的位置上,接著的讀或寫操作將從此位置開始.函數的調用形式如下:
fseek(pf,offset,origin)
pf:文件指針
offset:以位元組為單位的位移量,為長整形.
origin:是起始點,用來指定位移量是以哪個位置為基準的.
1,fseek函數
位移量的表示方法
標識符 數字 代表的起始點
SEEK_SET 0 文件開始
SEEK_END 2 文件末尾
SEEK_CUR 1 文件當前位置
假設pf已指向一個二進制文件,則;
fseek(pf,30L,SEEK_SET)
fseek(pf,-10L*sizeof(int),SEEK_END)
對於文本文件,位移量必須是0;如:
fseek(pf,0L,SEEK_SET)
fseek(pf,0L,SEEK_END)
2. ftell函數
ftell函數用以獲得文件當前位置指針的位置,函數給出當前位置指針相對於文件開頭的位元組數.如;
long t;
t=ftell(pf);
當函數調用出錯時,函數返回-1L.
我們可以通過以下方式來測試一個文件的長度:
fseek(fp,0L,SEEK_END);
t=ftell(fp);
3.rewind函數
調用形式為:
rewind(pf);
函數沒有返回值.函數的功能是使文件的位置指針回到文件的開頭.
Ⅱ C語言數據文件有幾種存儲方式每種存儲形式各有什麼特點
C語言中有兩種存取數據的方式。
① 順序存取:當「打開」文件進行讀或寫操作時總是從文件的開頭開始,從頭到尾順序讀或寫。
② 直接存取:又稱隨機存取文件,可以通過調用C語言的庫函數來指定開始讀(寫)的位元組號,然後直接對此位置上的數據進行讀或寫操作。
Ⅲ 127、對C語言的文件存取方式的論述中,正確的是文件( )。 A、只能順
正罩薯確的是
C、可戚悶冊以是順序存取,也可以是隨機高宏存取
例如用 fseek() 來定位。
Ⅳ 在C語言中,文件的存取是以 什麼為單位
在C語言中,文件存取都是以位元組作為單位的。
C語言支持很多文件輸入輸出函數,比如fread/fwrite, fscanf/fprintf, fgets/fputs, fgetc/fgetc等。
不過其根本都是從文件中逐位元組進行讀取或寫入,然後再做相應的判斷或操作。
所以,文件存取的最基本單位就是文件存儲的最基本單位,位元組。
Ⅳ 在C語言中,文件按存儲形式劃分可分為-----和-----
在C語言中文件按存儲形式可劃分為文本文件和二進制文件,文本文件又稱純文本文件。
文本文件是一種計算機文件,它是一種典型的順序文件,其文件的邏輯結構又屬於流式文件。文本文件是指以ASCII碼方式(也稱文本方式)存儲的文件,更確切地說,英文、數字等字元存儲的是ASCII碼,而漢字存儲的是機內碼。文本文件中除了存儲文件有效字元信息(包括能用ASCII碼字元表示的回車、換行等信息)外,不能存儲其他任何信息。
二進制文件是指包含在 ASCII及擴展 ASCII 字元中編寫的數據或程序指令的文件,廣義的二進制文件即指文件,由文件在外部設備的存放形式為二進制而得名。狹義的二進制文件即除文本文件以外的文件。文本文件是一種由很多行字元構成的計算機文件。文本文件存在於計算機系統中,通常在文本文件最後一行放置文件結束標志。文本文件的編碼基於字元定長,解碼相對要容易一些;二進制文件編碼是變長的,靈活利用率要高,而解碼要難一些,不同的二進制文件解碼方式是不同的。
Ⅵ C語言中文件的存取方式是什麼
二進制方式 和 文本方式。
fopen 里可以定義 r,w,a,b 組合
順序存取 或 隨機存取(用fseek等函數幫助)
Ⅶ C語言對二進制文件的存取是以什麼為單位進行的。
c語言文件把數據滑帆看作是睜擾一連串的字元(位元組)。C語言文件是一個字元(位元組)的序列,是一字元流或位元組流,是一種流式文件。根據數據的組織形式,可分為文本文件和二進制文件。
文本文件又稱為ASCII文件,每一個位元組中存放一個ASCII代碼,代表一個字元。例如,一個整數123,若用.ASCII文件存放,佔3個位元組的
存儲
單元,1、2、3各用一個位元組
存儲
。而1、2、3的ASCII碼分別為49、50、51,故123用ASCII文件存信早雹放時,存放形式為001100010011001000110011。
二進制文件是直接用數據的二進制形式存放。例如,對整數123,二進制為0000000001111011,用二進制文件存放,需2個位元組,存放形式為0000000001111011。
使用ASCII碼文件,一個位元組代表一個字元,便於對字元一一處理和輸出,但佔用較多的存儲空間,並且要花費轉換時間(ASCII碼與二進制之間的轉換)。使用二進制文件,
在內存中的數據形式與輸出到外部文件中的數據形式完全一致,可以克服ASCII文件的缺點,但不直觀,一個位元組並不對應一個字元或一個數,不能直接輸出字元形式。一般中間數據用二進制文件保存,輸入輸出使用ASCII文件。
Ⅷ c語言編程中怎麼用文件存儲數據具體一點,謝謝
主要用C語言的庫函數,有open write read 或者是fopen fwrite fread這幾個函數,迅速就是先open 然後write,具體函數的用法可自行網路,如果你是問存儲數據的格式的話,自己定義結構體存儲的方式是最方便直接的
Ⅸ c語言文件讀寫,如何正確的存取多位數(int)
C語言將整形數據存儲到文件中,可採用兩種方法,1、二進制存取 2、字元方式存取。
因存儲方式的不同,讀取也要採用相應的方式進行操作,否則不能正確得到存儲的數據。
二進制存取
二進制方式是將原數據的內存格式存儲到文件中,在同類型的機器上可以正確的讀取。但如果換成不同類型的機器則會出現數據解釋錯誤,因此,具有不可移植性。
這種方式,採用的存取函數相應為:fwrite()和fread().
如:
int num=12345;
FILE *fp=fopen( "datafile", "wb" );
fwrite( &num, sizeof(int), 1, fp ); //將num數據寫入文件
....
FILE *fp=fopen( "datafile", "rb" );
fread( &num, sizeof(int), 1, fp ); //讀文件數據到num中
字元方式存取
字元方式是將數據的可見內容,以字元形式存儲到文件中,可以在任何機器上閱讀並讀取,方便不同系統間的數據傳遞。
這種方式,採用的存取函數相應為:fprintf()和fscanf().
如:
int num=0;
FILE *fp=fopen( "datafile", "w" );
fprintf(fp, "%d ", num ); //將num數據寫入文件
....
FILE *fp=fopen( "datafile", "r" );
fscanf(fp,"%d", &num ); //讀文件數據到num中