C語言中的熱門檔案操作

來源:互聯網
上載者:User

原文連結

常常覺得,我對很多東西都是要求會用就好,不求甚解。比如說每次一遇到檔案操作,我必要查查相關的API和例子,然後依樣畫葫蘆寫下來。或許正是因為這種不求甚解的態度,讓我一直處於半桶水的狀態。看完了《C專家編程》後,覺得很多東西裡面有包含了很多學問;開了博之後,常常希望寫點有用的東西,有點像記筆記了,呵呵。記筆記有一個好處,就是要求你必須對現有的知識進行整理,然後才能有條理地寫下來。昨天寫演算法的時候又遇到檔案操作的東西了,這次索性把相關的API都整理出來,當是記了一回筆記了。

 

在對檔案進行操作之前,要先開啟檔案,使用完畢後,要關閉檔案。檔案操作相關的API如下:

 

C代碼 
#include <stdio.h> FILE *fopen(const char *path, const char *mode);   //path表示檔案路徑,mode表示檔案使用方式int fclose( FILE* pf );  //成功關閉返回0,否則返回EOF,並且將錯誤記錄在系統全域變數errno中 //從stream當前位置讀取一個字元int getc(FILE *stream); //將c寫入stream當前位置,成功返回0,否則返回EOFint fputc(int c, FILE *stream);  //從stream當前位置讀取長度為size-1的字串並儲存於s中。成功返回s,否則返回NULLchar *fgets(char *s, int size, FILE *stream);   //將字串寫入streamint fputs(const char *s, FILE *stream);//讀取nmemb份資料,每份大小為size,並將它們儲存在ptr指向的空間。返回讀取的資料大小size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); //從ptr指向的空間提取資料向stream寫入nmemb份資料,每份大小為size,返回寫入的資料大小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是由系統定義的一個結構,該結構中包含有檔案名稱、檔案狀態、檔案目前狀態等相關資訊。所謂開啟檔案,實際上是建立檔案的各種有關資訊,並使檔案指標指向該檔案,以便進行其它操作。關閉檔案則斷開指標與檔案之間的聯絡,也就禁止再對該檔案進行操作。

 

有關檔案的使用方式有以下幾點說明:

 

1. 檔案使用方式由r,w,a,t,b,+六個字元拼成,各字元的含義是:
   r(read): 讀
   w(write): 寫
   a(append): 追加
   t(text): 文字檔,可省略不寫
   b(banary): 二進位檔案
   +: 讀和寫

2. 凡用“r”開啟一個檔案時,該檔案必須已經存在, 且只能從該檔案讀出。

3. 用“w”開啟的檔案只能向該檔案寫入。 若開啟的檔案不存在,則以指定的檔案名稱建立該檔案,若開啟的檔案已經存在,則將該檔案刪去,重建一個新檔案。

4. 若要向一個已存在的檔案追加新的資訊,只能用“a ”方式開啟檔案。但此時該檔案必須是存在的,否則將會出錯。

5. 在開啟一個檔案時,如果出錯,fopen將返回一個null 指標值NULL。在程式中可以用這一資訊來判別是否完成開啟檔案的工作,並作相應的處理。

 

6. 把一個文字檔讀入記憶體時,要將ASCII碼轉換成二進位碼, 而把檔案以文本方式寫入磁碟時,也要把二進位碼轉換成ASCII碼,因此文字檔的讀寫要花費較多的轉換時間。對二進位檔案的讀寫不存在這種轉換。

7. 標準輸入檔案(鍵盤),標準輸出檔案(顯示器 ),標準出錯輸出(出錯資訊)是由系統開啟的,可直接使用。檔案關閉函數fclose()檔案一旦使用完畢,應用關閉檔案函數把檔案關閉, 以避免檔案的資料丟失等錯誤。

有關檔案讀寫的一些說明:

1. 進行讀取操作時,檔案必須是以讀或讀寫方式開啟的,進行寫操作時,必須是以寫或追加方式開啟的

2. 檔案內部有一個位置指標,用來指向檔案當前的讀寫位置,在檔案開啟時,該指標總是指向檔案的第一個字元位置。

3. 對於fgets,如果在未讀完size-1個字元前就遇到了EOF或分行符號,則讀出結束

4. fread和fwrite可以用來從檔案讀取結構、寫入結構

 

檔案的其他動作包括:

 

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); //擷取或設定檔案位置指標int fgetpos(FILE *stream, fpos_t *pos); int fsetpos(FILE *stream, fpos_t *pos);  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.