1、file
屬於c語言,在stdio.h標頭檔案中,是乙個結構體。
2、cfile
由mfc提供。
3、fiostream
標準c++
file檔案流用於對檔案的快速操作,主要的操作函式有fopen、fseek、fread、fclose,在對檔案結構比較清楚時使用這幾個函式會比較快捷的得到檔案中具體位置的資料,提取對我們有用的資訊,滿足程式設計中的需要。以下分別進行說明,還有他們使用時的注意事項
函式原型 file * fopen(const char *path,cost char *mode)
作用:開啟乙個檔案,返回指向該檔案的指標
引數說明:第乙個引數為欲開啟檔案的檔案路徑及檔名,第二個引數表示對檔案的開啟方式
注:mode有以下值:
r:唯讀方式開啟,檔案必須存在
r+:可讀寫,必須存在
rb+:開啟二進位制檔案,可以讀寫
rt+:開啟文字檔案,可讀寫
w:只寫,檔案存在則檔案長度清0,檔案不存在則建立該檔案
w+:可讀寫,檔案存在則檔案長度清0,檔案不存在則建立該檔案
a:附加方式開啟只寫,不存在建立該檔案,存在寫入的資料加到檔案尾,eof符保留
a+:附加方式開啟可讀寫,不存在建立該檔案,存在寫入的資料加到檔案尾,eof符不保留
wb:開啟二進位制檔案,只寫
wb+:開啟或建立二進位制檔案,可讀寫
wt+:開啟或建立文字檔案,可讀寫
at+:開啟文字檔案,可讀寫,寫的資料加在文字末尾
ab+:開啟二進位制檔案,可讀寫,寫的資料加在檔案末尾
由mode字元可知,上述如r、w、a在其後都可以加乙個b,表示以二進位制形式開啟檔案
返回值:檔案開啟了,返回乙個指向該開啟檔案的指標(file結構);檔案開啟失敗,錯誤上存error code(錯誤**)
注意:在fopen操作後要進行判斷,是否檔案開啟,檔案真正開啟了才能進行後面的讀或寫操作,如有錯誤要進行錯誤處理
例:file *pfile=fopen(const char *filename,」rb」);
開啟檔案流還有乙個支援寬字元的函式,如下
file *_wfopen(const wchar_t *filename,const wchar_t *mode)
函式原型:size_t fread(void* buff,size_t size,size_t count,file* stream)
第二個引數為單個元素的大小,即由指標寫入位址的資料大小,注意單位是位元組
第三個引數為元素個數,即要讀取的資料大小為size的元素個素
第四個引數為提供資料的檔案指標,該指標指向檔案內部資料
返回值:讀取的總資料元素個數
例:int num,count;
int* pr=new int[num*count];
fread(pr, num*4, count, stream); // stream為fopen中返回的file指標
要將資料寫入pr中,必須為pr分配記憶體,乙個int為4個位元組,所以要x4
函式原型:int fseek(file *stream,long offset,int framewhere)
作用:重定位檔案內部的指標
引數:第乙個為檔案指標,第二個是指標的偏移量,第三個是指標偏移起始位置
返回值:重定位成功返回0,否則返回非零值
需要注意的是該函式不是重定位檔案指標,而是重定位檔案內部的指標,讓指向檔案內部資料的指標移到檔案中我們感興趣的資料上,重定位主要是這個目的。
說明:執行成功,則stream指向以fromwhere為基準,偏移offset個位元組的位置。執行失敗(比方說offset偏移的位置超出了檔案大小),則保留原來stream的位置不變
函式原型:int fclose(file *stream)
功能:關閉乙個檔案流,使用fclose就可以把緩衝區內最後剩餘的資料輸出到磁碟檔案中,並釋放檔案指標和有關的緩衝區
熟練使用以上四個函式可以從檔案中獲取對我們有用的資料型,前提對於檔案格式很了解,比如,對於乙個dib位**件,就可以讀取出他的檔案中的頭資訊和畫素點資訊。
from:
char *fgets(char *buf, int bufsize, file *stream);
引數
*buf: 字元型指標,指向用來儲存所得資料的位址。
bufsize: 整型資料,指明儲存資料的大小。
*stream: 檔案結構體指標,將要讀取的檔案流。
返回值
1. 成功,則返回第乙個引數buf;
2. 在讀字元時遇到end-of-file,則eof指示器被設定,如果還沒讀入任何字元就遇到這種情況,則buf保持原來的內容,返回null;
3. 如果發生讀入錯誤,error指示器被設定,返回null,buf的值可能被改變。
從檔案結構體指標stream中讀取資料,每次讀取一行。讀取的資料儲存在buf指向的字元陣列中,每次最多讀取bufsize-1個字元(第bufsize個字元賦』\0』),如果檔案中的該行,不足bufsize個字元,則讀完該行就結束。如若該行(包括最後乙個換行符)的字元數超過bufsize-1,則fgets只返回乙個不完整的行,但是,緩衝區總是以null字元結尾,對fgets的下一次呼叫會繼續讀該行。函式成功將返回buf,失敗或讀到檔案結尾返回null。因此我們不能直接通過fgets的返回值來判斷函式是否是出錯而終止的,應該借助feof函式或者ferror函式來判斷。
VC中用記憶體對映檔案處理大檔案
引言 檔案操作是應用程式最為基本的功能之一,win32 api和mfc均提供有支援檔案處理的函式和類,常用的有win32 api的createfile writefile readfile 和mfc提供的cfile類等。一般來說,以上這些函式可以滿足大多數 場合的要求,但是對於某些特殊應用領域所需要...
VC中用記憶體對映檔案處理大檔案
檔案操作是應用程式最為基本的功能之一,win32 api和mfc均提供有支援檔案處理的函式和類,常用的有win32 api的createfile writefile readfile 和mfc提供的cfile類等。一般來說,以上這些函式可以滿足大多數場合的要求,但是對於某些特殊應用領域所需要的動輒幾...
VC中用記憶體對映檔案處理大檔案
引言 檔案操作是應用程式最為基本的功能之一,win32 api和mfc均提供有支援檔案處理的函式和類,常用的有win32 api的createfile writefile readfile 和mfc提供的cfile類等。一般來說,以上這些函式可以滿足大多數場合的要求,但是對於某些特殊應用領域所需要的...