導航:首頁 > 文件教程 > c語言中文件的存取方式是

c語言中文件的存取方式是

發布時間:2023-05-10 05:09:01

⑴ C語言中fopen函數打開文件後,文件以何種方式讀入內存

打開文件後, 讀文件有一個緩沖區, 真正讀文件是按塊讀的。
一塊多大和內你系統有關。比如讀容4K到內存。
然後 程序的讀函數, 是從緩沖區去讀的。 要讀的數據, 在緩沖區裡面就直接讀到程序。
不在, 那麼清掉緩沖, 重新讀一次文件對應位置。

⑵ 在C語言中,文件的存取是以 什麼為單位

在C語言中,文件存取都是以位元組作為單位的。

C語言支持很多文件輸入輸出函數,比如fread/fwrite, fscanf/fprintf, fgets/fputs, fgetc/fgetc等。
不過其根本都是從文件中逐位元組進行讀取或寫入,然後再做相應的判斷或操作。
所以,文件存取的最基本單位就是文件存儲的最基本單位,位元組。

⑶ 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\n",
num
);
//將num數據寫入文件
....
FILE
*fp=fopen(
"datafile",
"r"
);
fscanf(fp,"%d",
&num
);
//讀文件數據到num中

⑷ C語言數據文件有幾種存儲方式每種存儲形式各有什麼特點

C語言中有兩種存取數據的方式。
① 順序存取:當「盯卜神打開」文件進行讀或寫操作時總是從文件的開頭開始,從頭到尾順序讀或寫。
② 直接存取:又稱隨機存取文件,可以通過凱虧調用C語言的庫函數來指定開始讀(寫)的位元組號,然後直接對此位置上的數據進行讀或寫操弊磨作。

⑸ 在C語言中文件的存取方式是什麼

首先,你的理解有點偏差,文件的存取方式不是由開發語猜搭言決定的,而是由文件系統決定的,linux是用C語言開發的,其文件系統的存取方式有三種
1. 順序存取

順序存取是按照文件的邏輯地址順序存取。

?? 固定長記錄的順序存取是十分簡單的。讀操作總是讀出上一次讀出的文件的下一個記錄,同時,自動讓文件記錄讀指針推進,以指向下一次要讀出的記錄位置。如果文件是可讀可寫的。再設置一個文件記錄指針,它總指向下一次要寫入記錄的存放位置,執行寫操作時,將一個記錄寫到文件 末端。允許對這種文件進行前跳或後退N(整數)個記錄的操作。順序存取主要用於磁帶文件,但也適用於磁碟上的順序文件。

?? 可變長記錄的順序文件,每個記錄的長度信息存放於記錄前面一個單元中,它的存取操作分兩步進行。讀出時,根據讀指針值先讀出存放記錄長度的單元 。然後,得到當前記錄長後再把當前記錄一起寫到指針指向的記錄位置,同時,調整寫指針值 。

由於順序文件是順序存取的,可採用成組和分解操作來加速文件的輸入輸出。

2. 直接存取(隨機存取法)

很多應用場合要求以任意次序直迅叢接讀寫某個記錄。例如,航空訂票系統,把特定航班的所有信息用航班號作標識,存放在某物理塊中,用戶預訂某航班時,需要直接將該航班的信息取出。直接存取方法便適合於這類應用,它通常用於磁碟文件。

為了實現直接存取,一個文件可以看作由順序編號的物理塊組成的,這些塊常常劃成等長,作為定位和存取的一個最小單位,如一塊為1024位元組、4096位元組,視系統和應用而定。於是用戶可以請求讀塊22、然後,寫塊48,再讀塊9等等。直接存取文件對讀或寫塊的次序沒有限制。用戶提供給操作系統的是相對塊號,它是相對於文件開始位置的一個位移量,而絕對塊號則由系統換算得到。

3. 索引存取

第三種類型的存取是基於索引文件的索引存取方法。由於文件中的記錄穗昌拿不按它在文件中的位置,而按它的記錄鍵來編址,所以,用戶提供給操作系統記錄鍵後就可查找到所需記錄。

通常記錄按記錄鍵的某種順序存放,例如,按代表健的字母先後次序來排序。對於這種文件,除可採用按鍵存取外,也可以採用順序存取或直接存取的方法。信息塊的地址都可以通過查找記錄鍵而換算出。實際的系統中,大都採用多級索引,以加速記錄查找過程。

⑹ C語言中文件的存取方式是什麼

二進制方式 和 文本方式。
fopen 里可以定義 r,w,a,b 組合
順序存取 或 隨機存取(用fseek等函數幫助)

⑺ C語言的磁碟文件問題

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);

}

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);
函數沒有返回值.函數的功能是使文件的位置指針回到文件的開頭.

最常用的文件使用方式及其含義如下:

2,"rb".為讀而打開二進制文件.
4,"wb".為寫而打開二進制文件
6,"ab".為在文件後面添加數據而打開一個二進制文件.
8,"rb+".為讀和寫而打開二進制文件.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置.
9,"w+".首先建立一個新文件,進行寫操作,隨後可以從頭開始讀.(若文件存在,原內容將全部消失)
10,"wb+".功能與"w+"同.只是在隨後的讀寫時,可以由位置函數設置讀和寫的起始位置
11,"a+".功能與"a"相同;只是在文件尾部添加新的數據後,可以從頭開始讀.
12,"ab+".功能與"a+"相同;只是在文件尾部添加新數據之後,可以由位置函數設置開始讀的起始位置.

1,"r".為讀而打開文本文件.(不存在則出錯)

3,"w".為寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內容將被覆蓋)
.
5,"a".為在文件後面添加數據而打開文本文件.(若不存在,則新建;反之,在原文件後追加)

7,"r+".為讀和寫而打開文本文件.(讀時,從頭開始;在寫數據時,新數據只覆蓋所佔的空間,其後不變)

⑻ C語言文件的理論知識,填空,因為我沒有答案所以請大神給出填空答案,有的真不知道填什麼,理論不過關啊

1、C語言中,系統的標准輸入與輸出文件是【stdin和stdout】。
2、在C程序中,文件可以用【順序】方式存取,也可以用【隨機】方式存取。
3、在C程序中,數據可以用【文本】和【二進制】兩種代碼形式存放。
4、在C程序中,文件的存取是以【位元組】為單位的,這種文件被稱為【文本】文件
5、函數調用語句:ch=fgetc(fp);從fp指向的文件中讀入【一】個字元放到ch中。如果遇到文件結束,函數返回一個文件結束標記【EOF】。
6、feof(fp)函數用來判斷文件是否結束,如果遇到文件結束,函數值為【-1】,否則為【0】。
7、在C程序中,系統為存放文件信息定義了一個結構體類型,取名為【FILE】。
8、fopen函數打開一個文件時,通知給系統三個信息:【1】【2】【3】。
9、fprintf和fscanf函數的讀寫對象是【磁碟文件】。
10、設有以下結構類型:
struct st
{char name[8];
int num;
float s[4];
}student[50];
並且結構體數組student中的元素都已有值,若要將這些元素寫到硬碟文件fp中,請將以下fwrite語句補充完整。
fwrite (student,50*sizeof(struct st),1,fp);

⑼ 127、對C語言的文件存取方式的論述中,正確的是文件( )。 A、只能順

正罩薯確的是
C、可戚悶冊以是順序存取,也可以是隨機高宏存取
例如用 fseek() 來定位。

⑽ C語言中變數的存儲類型有哪幾種,存儲方式哪幾種謝嘍

在C語言中,對變數的存儲類型說明有以下四種:

1、auto 自動變數

2、register 寄存器變數

3、extern 外部變數

4、static 靜態變數

所謂存儲類型是指變數佔用內存空間的方式,也稱為存儲方式。

變數的存儲方式可分為「靜態存儲」和「動態存儲」兩種。

1、靜態存儲變數通常是在變數定義時就在存儲單元並一直保持不變,直至整個程序結束。

2、動態存儲變數是在程序執行過程中,使用它時才分配存儲單元,使用完畢立即釋放。典型的例子是函數的形式參數,在函數定義時並不給形參分配存儲單元,只是在函數被調用時,才予以分配,調用函數完畢立即釋放。

如果一個函數被多次調用,則反復地分配、釋放形參變數的存儲單元。從以上分析可知,靜態存儲變數是一直存在的,而動態存儲變數則時而存在時而消失。

(10)c語言中文件的存取方式是擴展閱讀:

變數根據定義的位置的不同的生命周期,具有不同的作用域,作用域可分為6種:全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。

一、從作用域看:

1、全局變數具有全局作用域。全局變數只需在一個源文件中定義,就可雹緩以作用於所有的源文件。當然,橘肆輪其他不包含全局變數的定義的源文件需要用extern關鍵字再次聲明這個全局變數。

2、靜態局部變數具有局部作用域,它只被初始化一次,自從第一次被初始化直到程序運行結束一直存在,它和全局變數的區別在於全局變數對所有函數都是可見的,而靜態局部變數只對定義自己的函數體始終可見。

3、局部變數也只有局部作用域,它是自動對象(auto),它在程序運行期間不是一直存在,而是只在函數執行期間存在,函數的一次調用執行結束後,變數被撤銷,其所佔用的內存也被收回。

4、靜態全局變數也具有全局作用域,它與全局變數的區別在於如果程序包含多個文件的話,它作用於定義它文件里,不能作用到其他文件里,即被static關鍵字修飾過的變數具有文件作用域。這樣即使兩圓信個不同的源文件都定義了相同名字的靜態全局變數,它們也是不同的變數。

二、從分配空間看:

全局變數,靜態局部變數,靜態全局變數都在靜態存儲區分配空間,而局部變數在棧里分配空間。

全局變數本身就是靜態存儲方式,靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。

而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一個源程序的其他源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其他源文件中引起錯誤。

1、靜態變數會放在程序的靜態數據存儲區(全局可見)中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變數和堆變數的區別。

2、變數用static告知編譯器,自己僅僅在變數的作用范圍內可見。這一點是它與全局變數的區別。

參考資料來源:網路-變數-存儲類型

閱讀全文

與c語言中文件的存取方式是相關的資料

熱點內容
win10刪除c盤文件會刪掉系統嗎 瀏覽:785
qq的獨立密碼怎麼取消 瀏覽:289
後台的商品數據在哪裡看 瀏覽:795
不用網路載入的單機游戲有哪些 瀏覽:608
數據線插頭怎麼接頭 瀏覽:577
網路載入視頻失敗是怎麼回事 瀏覽:805
傳奇賬號在哪個文件夾里 瀏覽:346
百度app在哪裡安裝 瀏覽:587
如何設置路由器網路不斷網 瀏覽:471
傳到qq群里的文件怎麼刪除 瀏覽:861
索尼安卓71更新日誌 瀏覽:234
怎麼找手機里的垃圾app 瀏覽:540
2015藍橋杯代碼填空 瀏覽:698
安卓資料庫dbexecSQL 瀏覽:227
doc重命名文件格式 瀏覽:728
getscreen截圖工具下載 瀏覽:719
共識數據是什麼時候開始的 瀏覽:96
數碼管顯示電壓程序 瀏覽:479
資料庫文件有哪個 瀏覽:543
途強儲存在哪個文件夾 瀏覽:172

友情鏈接