C语言中的常用文件操作
原文鏈接
常常覺得,我對很多東西都是要求會用就好,不求甚解。比如說每次一遇到文件操作,我必要查查相關(guān)的API和例子,然后依樣畫葫蘆寫下來。或許正是因為這種不求甚解的態(tài)度,讓我一直處于半桶水的狀態(tài)。看完了《C專家編程》后,覺得很多東西里面有包含了很多學問;開了博之后,常常希望寫點有用的東西,有點像記筆記了,呵呵。記筆記有一個好處,就是要求你必須對現(xiàn)有的知識進行整理,然后才能有條理地寫下來。昨天寫算法的時候又遇到文件操作的東西了,這次索性把相關(guān)的API都整理出來,當是記了一回筆記了。
?
在對文件進行操作之前,要先打開文件,使用完畢后,要關(guān)閉文件。文件操作相關(guān)的API如下:
?
C代碼? #include <stdio.h> FILE *fopen(const char *path, const char *mode); //path表示文件路徑,mode表示文件使用方式 int fclose( FILE* pf ); //成功關(guān)閉返回0,否則返回EOF,并且將錯誤記錄在系統(tǒng)全局變量errno中//從stream當前位置讀取一個字符 int getc(FILE *stream); //將c寫入stream當前位置,成功返回0,否則返回EOF int fputc(int c, FILE *stream); //從stream當前位置讀取長度為size-1的字符串并保存于s中。成功返回s,否則返回NULL char *fgets(char *s, int size, FILE *stream); //將字符串寫入stream int fputs(const char *s, FILE *stream); //讀取nmemb份數(shù)據(jù),每份大小為size,并將它們保存在ptr指向的空間。返回讀取的數(shù)據(jù)大小 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); //從ptr指向的空間提取數(shù)據(jù)向stream寫入nmemb份數(shù)據(jù),每份大小為size,返回寫入的數(shù)據(jù)大小 size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream); //格式讀寫,與標準輸入輸出的printf和scanf一樣,只是在前面多了一個文件指針 int fprintf(FILE *stream, const char *format, ...); int fscanf(FILE *stream, const char *format, ...);?
fopen返回一個稱為“文件指針”的FILE*,FILE是由系統(tǒng)定義的一個結(jié)構(gòu),該結(jié)構(gòu)中包含有文件名、文件狀態(tài)、文件當前狀態(tài)等相關(guān)信息。所謂打開文件,實際上是建立文件的各種有關(guān)信息,并使文件指針指向該文件,以便進行其它操作。關(guān)閉文件則斷開指針與文件之間的聯(lián)系,也就禁止再對該文件進行操作。
?
有關(guān)文件的使用方式有以下幾點說明:
?
1.?文件使用方式由r,w,a,t,b,+六個字符拼成,各字符的含義是:
?? r(read):?讀
?? w(write):?寫
?? a(append):?追加
?? t(text):?文本文件,可省略不寫
?? b(banary):?二進制文件
?? +:?讀和寫
2.?凡用“r”打開一個文件時,該文件必須已經(jīng)存在, 且只能從該文件讀出。
3.?用“w”打開的文件只能向該文件寫入。 若打開的文件不存在,則以指定的文件名建立該文件,若打開的文件已經(jīng)存在,則將該文件刪去,重建一個新文件。
4.?若要向一個已存在的文件追加新的信息,只能用“a ”方式打開文件。但此時該文件必須是存在的,否則將會出錯。
5.?在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應(yīng)的處理。
?
6.?把一個文本文件讀入內(nèi)存時,要將ASCII碼轉(zhuǎn)換成二進制碼, 而把文件以文本方式寫入磁盤時,也要把二進制碼轉(zhuǎn)換成ASCII碼,因此文本文件的讀寫要花費較多的轉(zhuǎn)換時間。對二進制文件的讀寫不存在這種轉(zhuǎn)換。
7.?標準輸入文件(鍵盤),標準輸出文件(顯示器?),標準出錯輸出(出錯信息)是由系統(tǒng)打開的,可直接使用。文件關(guān)閉函數(shù)fclose()文件一旦使用完畢,應(yīng)用關(guān)閉文件函數(shù)把文件關(guān)閉, 以避免文件的數(shù)據(jù)丟失等錯誤。
有關(guān)文件讀寫的一些說明:
1. 進行讀取操作時,文件必須是以讀或讀寫方式打開的,進行寫操作時,必須是以寫或追加方式打開的
2.?文件內(nèi)部有一個位置指針,用來指向文件當前的讀寫位置,在文件打開時,該指針總是指向文件的第一個字符位置。
3. 對于fgets,如果在未讀完size-1個字符前就遇到了EOF或換行符,則讀出結(jié)束
4. fread和fwrite可以用來從文件讀取結(jié)構(gòu)、寫入結(jié)構(gòu)
?
文件的其他操作包括:
?
C代碼? //將文件的位置指針指向由whence加上偏移offset的位置,whence可以是SEEK_SET(文件起始位置)、SEEK_CUR(當前位置)、SEEK_END(終止位置) int fseek(FILE *stream, long offset, int whence); //返回文件當前位置 long ftell(FILE *stream); //將位置指針指向文件頭,相當于fseek(stream, 0L, SEEK_SET) void rewind(FILE *stream); //獲取或設(shè)置文件位置指針 int fgetpos(FILE *stream, fpos_t *pos); int fsetpos(FILE *stream, fpos_t *pos);?
完總結(jié)
以上是生活随笔為你收集整理的C语言中的常用文件操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10月28号日志
- 下一篇: BackGroundWorker用法