C檔案輸入 輸出

2022-03-13 03:43:58 字數 4276 閱讀 4367

file * fopen (const char * restrict filename, const char * restrict modes)

開啟乙個檔案流。

它的第乙個引數是要開啟的檔名;更確切地說,是包含該檔名的字串的位址。第二個引數是用於指定檔案開啟模式的乙個字串。返回值為檔案指標。

c庫提供了一些可能的模式:

模式字串

意義"r"

開啟乙個文字檔案,只可以讀取檔案。檔案必須存在。

"w"開啟乙個文字檔案,只可以寫入檔案,先將檔案的長度截為零。如果該檔案不存在則先建立之。

"a"開啟乙個文字檔案,只可以向已有檔案的結尾追加內容。初始時檔案指標定位在檔案結束位置。如果該檔案不存在則先建立之。

"r+"

開啟乙個文字檔案,可以進行更新,也即可以讀取和寫入檔案。初始時檔案指標定位在檔案開始位置。檔案必須存在。

"w+"

開啟乙個文字檔案,可以進行更新(讀取和寫入),如果該檔案存在則首先將其長度截為零;

如果不存在則先建立之。

"a+"

開啟乙個文字檔案,可以進行更新(讀取和寫入),向已有檔案的尾部追加內容,如果該檔案不存在則先建立之;可以讀取整個檔案,但寫入時只能追加內容。

"rb", "wb", "ab", "ab+", "a+b", "wb+", "w+b", "ab+", "a+b"

與前面的模式類似,只是使用二進位制模式而非文字模式開啟檔案

對於像unix和linux這樣只有一種檔案型別的系統,帶b字母的模式和對應的不帶b字母的模式是相同的。

int fclose (file *stream)

關閉已開啟的檔案流,同時根據需要重新整理緩衝區。更正規的程式也許還要檢查是否成功關閉了檔案。

引數為檔案指標。如果檔案成功關閉,函式返回0,否則返回eof。

int fflush (file *stream)

重新整理指定檔案流的緩衝區。如果引數為空則重新整理所有緩衝區。

int getc (file *stream)

int fgetc (file *stream)

從指定檔案中獲得乙個字元。如果讀到檔案結尾則返回eof。

int putc (int c, file *stream)

int fputc (int c, file *stream)

將字元c寫入file指標指定的檔案中。如果成功則返回該字元,否則返回eof。

int fprintf (file * restrict, const char * restrict, ...)

格式化輸出函式,第乙個引數為檔案指標,後兩個引數與printf相同。

返回被成功輸出的字元數。

int fscanf (file * restrict, const char * restrict, ...)

格式化輸入函式,第乙個引數為檔案指標,後兩個引數與scanf相同。

返回成功輸入的變數個數,遇到檔案結尾返回eof。

char * fgets (char * restrict s, int n, file * restrict stream)

輸入乙個字串。

該函式讀取到它所遇到的第乙個換行字元的後面,或者讀取比最大長度n少乙個字元,或者讀取到檔案結尾時結束。然後向末尾新增乙個空字元以構成乙個字串。

與gets不同的是,fgets函式不會丟棄換行符

int fputs (const char * restrict s, file * restrict stream)

輸出乙個字串。

第乙個引數為字串的源位址,第二個引數為目的檔案。寫入成功返回乙個非負值,失敗返回eof。與puts不同的是,fputs不會額外輸出換行符

int fseek (file * stream, long int off, int whence)

fseek( )函式允許您像對待陣列一樣對待乙個檔案,在開啟的檔案中直接移動到任意位元組處。

第乙個引數是指向檔案的file指標;第二個引數稱為偏移量,表示從起始點開始要移動的距離;第三個引數是模式,用來標識起始點。如果一切正常,fseek( )返回值為0,出現錯誤返回-1。

模式常量如下:

模式偏移量起點

seek_set

檔案開始

seek_cur

當前位置

seek_end

檔案結尾

函式呼叫的例子:

fseek (fp, 0l, seek_set); // 找到檔案的開始處

fseek (fp, 10l, seek_set); // 找到檔案的第10個位元組

fseek (fp, 2l, seek_cur); // 從檔案的當前位置向前移動2個位元組

fseek (fp, 0l, seek_end); // 到達檔案結尾處

fseek (fp, -10l, seek_end); // 從檔案結尾處退回10個位元組

ansi對該函式降低了要求:

對於二進位制模式,c實現不需要支援seek_end模式。

在文字模式中,只要求保證如下這些呼叫有效:

fseek (file, 0l, seek_set)

到檔案開始

fseek (file, 0l, seek_cur)

在當前位置不動

fseek (file, 0l, seek_end)

到檔案結尾

fseek (file, ftell-pos, seek_set) 

到距檔案開始處ftell-pos位元組的位置,ftell-pos是ftell( )的返回值

long int ftell (file * stream)

以乙個long型別值返回乙個檔案的當前位置。

void rewind (file * stream)

將當前指標回到檔案的開始處。

int ungetc (int c, file * stream)

將c指定的字元放回輸入流中。如果向輸入流中放入了乙個字元,下次呼叫標準輸入函式就會讀入那個字元。ansi c標準保證每次只會放回乙個字元。若呼叫成功,該函式返回回退的字元,否則返回eof。

int setvbuf (file * restrict stream, char * restrict buf, int modes, size_t n)

建立乙個供標準i/o函式使用的替換緩衝區。開啟檔案以後,在沒有對流進行任何操作以前,可以呼叫這個函式。

由指標stream指定流;buf指向將使用的儲存區,如果buf的值是null則函式會自己分配乙個緩衝區,否則必須已經建立這個緩衝區;n指定陣列的大小;modes從以下選項中選取:_iofbf表示完全緩衝(緩衝區滿的時候重新整理),_iolbf表示行緩衝(緩衝區滿的或者乙個新行寫入的時候重新整理),_ionbf表示無緩衝。如果成功執行,函式會返回0;否則返回乙個非零值。

size_t fread (void * restrict ptr, size_t size, size_t n, file * restrict stream)

二進位制方式讀取檔案中的內容到ptr陣列中。

ptr指向目的地,size表示每次讀取的資料塊的大小,n表示讀取的資料塊的數量,stream表示檔案**。返回成功讀入的資料塊的數量。

size_t fwrite (const void * restrict ptr, size_t size, size_t n, file * restrict stream)

二進位制方式寫入ptr陣列中的內容到檔案中。

ptr指向資料來源,size表示每次讀取的資料塊的大小,n表示讀取的資料塊的數量,stream表示目的檔案。返回成功寫入的資料塊的數量。

int feof (file * stream)

如果最近一次輸入呼叫檢測到檔案結尾,feof( )函式返回乙個非零值(表示真),否則返回零值(表示假)。

int ferror (file * stream)

如果最近一次讀寫操作發生錯誤,ferror( )函式返回乙個非零值(表示真),否則返回零值(表示假)。

C 檔案輸入輸出

檔案輸入輸出 1 directory info 和file info 型別 directory和file通過靜態成員實現操作,擴充套件了system.object。返回強型別物件。directoryinfo和fileinfo通過例項級方法實現 必須使用new關鍵字分配它們 從filesystemin...

C 檔案輸入輸出

儲存在變數,陣列,物件中的資料都是暫時性的,當程式退出以後就會丟失,為了永久性儲存程式中有用資料,需要將資料以檔案形式儲存於磁碟或者光碟等物理介質。c 檔案主要是兩種 文字檔案和二進位制檔案 例如c 源程式是儲存在文字檔案,而最後的可執行程式是二進位制檔案。當然計算機本身是不區分二進位制檔案和文字的...

C 檔案輸入輸出

1 文字檔案的讀寫 文字檔案的讀寫,可以使用類似cin,cout方式,此外還有getline,get,二進位制檔案讀寫方式read,write經測試也可以使用 include include int main char buffer 256 注意使用getline讀至buffer,需新增 0 whi...