柚子快報激活碼778899分享:開發(fā)語言 C語言:文件處理
柚子快報激活碼778899分享:開發(fā)語言 C語言:文件處理
文件處理
一、文件的類型(一)文本文件和二進(jìn)制文件
(二)程序文件和數(shù)據(jù)文件數(shù)據(jù)文件按照二進(jìn)制儲存
二、文件的打開和關(guān)閉(一)文件指針(二)文件的打開和關(guān)閉1、fopen2、fclose
(三)文件的打開方式
三、文件讀寫函數(shù)(一)fgetc(二)fputc(三)fgets(四)fputs(五)fscanf(六)fprintf(七)fwrite(八)fread(九)sscanf(十)sprintf(十一)fseek(十二)ftell(十三)rewind
四、文件緩沖區(qū)結(jié)束語
一、文件的類型
(一)文本文件和二進(jìn)制文件
按照文本的組織信息來分,文件可以分成二進(jìn)制文件和文本文件
(二)程序文件和數(shù)據(jù)文件
按照文件功能來分,可以分成程序文件和數(shù)據(jù)文件
數(shù)據(jù)文件按照二進(jìn)制儲存
二、文件的打開和關(guān)閉
(一)文件指針
每個被使用的文件都在內(nèi)存中開辟了一個相應(yīng)的文件信息區(qū),用來存放文件的相關(guān)信息(如文件的名字,文件狀態(tài)及文件當(dāng)前的位置等)。這些信息是保存在一個結(jié)構(gòu)體變量中的。該結(jié)構(gòu)體類型是由系統(tǒng)聲明的,取名FILE.
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
不同的C編譯器的FILE類型包含的內(nèi)容不完全相同,但是大同小異。 每當(dāng)打開一個文件的時候,系統(tǒng)會根據(jù)文件的情況自動創(chuàng)建一個FILE結(jié)構(gòu)的變量,并填充其中的信息
(二)文件的打開和關(guān)閉
1、fopen
FILE * fopen ( const char * filename, const char * mode );
用來打開文件。打開成功的同時,函數(shù)會返回一個文件指針類型,相當(dāng)于文件和指針之間建立聯(lián)系。
int main() {
FILE* pf = fopen("test.txt", "w");
if (pf != NULL) {
fputs("man, what can i see", pf);
fclose(pf);
}
return 0;
}
可以觀察到我們的字符串已經(jīng)被寫入到了文件之中。
2、fclose
int fclose ( FILE * stream );
用來關(guān)閉文件,如果文件成功關(guān)閉,那么就會返回0,如果失敗,返回EOF;
(三)文件的打開方式
文件使用方式 含義 如果指定文件不存在
“r”(只讀) 為了輸入數(shù)據(jù),打開一個已經(jīng)存在的文本文件 出錯
“w”(只寫) 為了輸出數(shù)據(jù),打開一個文本文件 新建文件
“a”(追加) 向文本文件尾添加數(shù)據(jù) 新建文件
“rb”(只讀) 為了輸入數(shù)據(jù),打開一個二進(jìn)制文件 出錯
“wb”(只寫) 為了輸出數(shù)據(jù),打開一個二進(jìn)制文件 新建文件
“ab”(追加) 向一個二進(jìn)制文件尾添加數(shù)據(jù) 新建文件
“r+”(讀寫) 為了讀和寫,打開一個文本文件 出錯
“w+”(讀寫) 為了讀和寫,建議一個新的文件 新建文件
“a+”(讀寫) 打開一個文件,在文件尾進(jìn)行讀寫 新建文件
“rb+”(讀寫) 為了讀和寫打開一個二進(jìn)制文件 出錯
“wb+”(讀寫) 為了讀和寫,新建一個新的二進(jìn)制文件 新建文件
“ab+”(讀寫) 打開一個二進(jìn)制文件,在文件尾進(jìn)行讀和寫 新建文件
三、文件讀寫函數(shù)
(一)fgetc
int fgetc ( FILE * stream );
成功 : 將返回字符讀?。ㄌ嵘秊?int 值)。 如果位置指示器位于文件末尾,則該函數(shù)返回 EOF 并設(shè)置流的 EOF 指示符 (feof)。
失敗 : 返回類型為 int 以適應(yīng)特殊值 EOF,該值表示失敗。 如果發(fā)生其他讀取錯誤,該函數(shù)也會返回 EOF,但會設(shè)置其錯誤指示器 (ferror)。
(二)fputc
int fputc ( int character, FILE * stream );
成功 : 將返回寫入的字符。 失敗 : 返回 EOF 并設(shè)置錯誤指示器 (ferror).
(三)fgets
char * fgets ( char * str, int num, FILE * stream );
成功 : 如果讀取到字符該函數(shù)返回 str,如果一個都沒有讀取到,返回空指針。讀取字符時遇到文件末尾,設(shè)置 eof 指示(feof) 失敗 : 則設(shè)置錯誤指示符 (ferror) 并返回空指針
(四)fputs
int fputs ( const char * str, FILE * stream );
成功 : 將返回一個非負(fù)值。 失敗 : 該函數(shù)返回 EOF 并設(shè)置錯誤指示器 (ferror)。
(五)fscanf
int fscanf ( FILE * stream, const char * format, ... );
成功 : 該函數(shù)返回已成功填充的參數(shù)列表的項(xiàng)目數(shù)。讀取字符時遇到文件末尾,設(shè)置 eof 指示(feof) 失敗 : 該函數(shù)返回 EOF 并設(shè)置錯誤指示器 (ferror)。 如果在解釋寬字符時發(fā)生編碼錯誤,該函數(shù)會將 errno 設(shè)置為 EILSEQ。
(六)fprintf
int fprintf ( FILE * stream, const char * format, ... );
成功 : 將返回寫入的字符總數(shù)。 失敗 : 則設(shè)置錯誤指示符 (ferror) 并返回負(fù)數(shù)。 如果在寫入寬字符時發(fā)生多字節(jié)字符編碼錯誤,則將 errno 設(shè)置為 EILSEQ 并返回負(fù)數(shù)。
(七)fwrite
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
成功 : 返回成功寫入的元素總數(shù)。 失敗 : 如果此數(shù)字與 count 參數(shù)不同,則寫入錯誤會阻止函數(shù)完成。在這種情況下,將為流設(shè)置錯誤指示器 (ferror)。
(八)fread
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
成功 : 返回成功讀取的元素總數(shù)。 失敗 : 如果此數(shù)字與 count 參數(shù)不同,則表示讀取時發(fā)生讀取錯誤或達(dá)到文件末尾。在這兩種情況下,都設(shè)置了正確的指示器,可以分別使用 ferror 和 feof 進(jìn)行檢查。
(九)sscanf
int sscanf ( const char * s, const char * format, ...);
成功 : 該函數(shù)返回已成功填充的參數(shù)列表中的項(xiàng)目數(shù)。 失敗 : 如果在成功解釋任何數(shù)據(jù)之前輸入失敗,返回 EOF。
(十)sprintf
成功 : 將返回寫入的字符總數(shù)。此計數(shù)不包括自動附加在字符串末尾的附加 null 字符。 失敗 : 則返回一個負(fù)數(shù)。
(十一)fseek
定位文件指針
int fseek ( FILE * stream, long int offset, int origin );
成功 :該函數(shù)返回零。 失敗 :返回非零值。 如果發(fā)生讀寫錯誤,則設(shè)置錯誤指示器 (ferror)。
orgin可以取值:
(十二)ftell
求文件指針相對于起始位置的偏移量
long int ftell ( FILE * stream );
成功 : 將返回位置指示器的當(dāng)前值。 失敗 : 返回 -1,并將 errno 設(shè)置為系統(tǒng)特定的正值。
(十三)rewind
將文件指針指向文件的首地址,可以fseek來達(dá)到相同的作用
void rewind ( FILE * stream );
四、文件緩沖區(qū)
ANSIC 標(biāo)準(zhǔn)采用“緩沖文件系統(tǒng)”處理的數(shù)據(jù)文件的,所謂緩沖文件系統(tǒng)是指系統(tǒng)自動地在內(nèi)存中為程序中每一個正在使用的文件開辟一塊“文件緩沖區(qū)”。從內(nèi)存向磁盤輸出數(shù)據(jù)會先送到內(nèi)存中的緩沖區(qū),裝滿緩沖區(qū)后才一起送到磁盤上。如果從磁盤向計算機(jī)讀入數(shù)據(jù),則從磁盤文件中讀取數(shù)據(jù)輸入到內(nèi)存緩沖區(qū)(充滿緩沖區(qū)),然后再從緩沖區(qū)逐個地將數(shù)據(jù)送到程序數(shù)據(jù)區(qū)(程序變量等)。緩沖區(qū)的大小根據(jù)C編譯系統(tǒng)決定的。
結(jié)束語
相信有了這篇文件操作,下次再也不用擔(dān)心忘記重新學(xué)啦。親愛的小伙伴,不要忘記支持博主哦!
柚子快報激活碼778899分享:開發(fā)語言 C語言:文件處理
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。