<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前面寫的通訊錄,增加人數退出程式後,資料就會消失。此時資料是存放在記憶體中,下次執行通訊錄程式的時候,資料又得重新錄入,如果使用這樣的通訊錄就很難受。
所以檔案操作就應運而生。資料持久化的方法有兩種:1.把資料存放在磁碟檔案2.存放到資料庫使用檔案我們們可以將資料直接存放在電腦的硬碟上,做到了資料的持久化。
但是在程式設計中,我們一般談的檔案有兩種:程式檔案、資料檔案(從檔案功能的角度來分類的)。
程式檔案:包括源程式檔案(字尾為.c),目標檔案(windows環境字尾為.obj),可執行程式(windows環境字尾為.exe)。
資料檔案:檔案的內容不一定是程式,而是程式執行時讀寫的資料,比如程式執行需要從中讀取資料的檔案,或者輸出內容的檔案。
在以前各章所處理資料的輸入輸出都是以終端為物件的,即從終端的鍵盤輸入資料,執行結果顯示到顯示器上。
其實有時候我們會把資訊輸出到磁碟上,當需要的時候再從磁碟上把資料讀取到記憶體中使用,這裡處理的就是磁碟上檔案。
一個檔案要有一個唯一的檔案標識,以便使用者識別和參照。
檔名包含3部分:檔案路徑+檔名主幹+檔案字尾
例如: c:codetest.txt
為了方便起見,檔案標識常被稱為檔名。
檔案指標:緩衝檔案系統中,關鍵的概念是“檔案型別指標
”,簡稱“檔案指標”。
檔案資訊區:每個被使用的檔案都在記憶體中開闢了一個相應的檔案資訊區,用來存放檔案的相關資訊(如檔案的名字,檔案狀態及檔案當前的位置等)。這些資訊是儲存在一個結構體變數中的。該結構體型別是有系統宣告的,取名FILE.
VS2013編譯環境提供的 stdio.h 標頭檔案中有以下的檔案型別申明;
struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE;
每當開啟一個檔案的時候,系統會根據檔案的情況自動建立一個FILE結構的變數,並填充其中的資訊,使用者不必關心細節。
FILE指標:一般都是通過一個FILE的指標來維護這個FILE結構的變數,這樣使用起來更加方便。
下面我們可以建立一個FILE*的指標變數:
FILE* pf;//檔案指標變數
定義pf是一個指向FILE型別資料的指標變數。可以使pf指向某個檔案的檔案資訊區(是一個結構體變數)。通過該檔案資訊區中的資訊就能夠存取該檔案。也就是說,通過檔案指標變數能夠找到與它關聯的檔案
規定:檔案在讀寫之前應該先開啟檔案,在使用結束之後應該關閉檔案。
在編寫程式的時候,在開啟檔案的同時,都會返回一個FILE*的指標變數指向該檔案,也相當於建立了指標和檔案的關係。
ANSIC 規定使用fopen函數來開啟檔案,fclose來關閉檔案
首先理解 讀和寫 是什麼意思。
寫檔案:將記憶體的資料 輸出 到檔案或螢幕上。
讀檔案:將檔案或鍵盤的資料 輸入 到記憶體中。
函數原型:
FILE *fopen( const char *filename, const char *mode );
函數功能:Open a file.
該函數的功能就是開啟一個檔案,函數的第一個引數是你要開啟的檔案的檔名,第二個引數是開啟這個檔案的形式。
返回值:Each of these functions returns a pointer to the open file. A null pointer value indicates an error.
返回一個指向檔案的指標,如果開啟錯誤返回空指標。
注意:需要檢查fopen返回值的有效性
FILE* pf = fopen("data.txt", "r"); if (pf == NULL) { printf("%sn", strerror(errno)); return;//失敗返回 }
函數原型:
int fclose( FILE *stream );
函數功能
Closes a stream (fclose) .
關閉一個流
返回值:fclose returns 0 if the stream is successfully closed.return EOF to indicate an errorreturn 0
如果流成功關閉,返回EOF(-1)如果失敗。
FILE* pf = fopen("data.txt", "r"); if (pf == NULL) { printf("%sn", strerror(errno)); return 1;//失敗返回 }
絕對路徑就是在具體檔案的位置。例如:
D:c-languagec yuyanc yuyandata.txt
FILE* pf = fopen("D:\c-language\c yuyan\c yuyandata.txt", "r");
但是為了防止字串中的’‘及其後面的字元被整體視為為跳脫字元,所以需要在每個’‘後面再加一個’’。
前三個是常用的方式。
規則:
檔案開啟方式 | 含義 |
---|---|
“r” (唯讀) | 開啟檔案進行輸入操作。如不存在將會報錯。 |
“w” (只寫) | 為了輸出資料,開啟一個文字檔案。如存在,則清空裡面的資料並輸出。如不存在將建立一個新的檔案。 |
“a” (追加) | 向文字檔案尾新增資料。如果檔案不存在,則建立該檔案。 |
“rb”(唯讀) | 為了輸入資料,開啟一個二進位制檔案。如不存在,則出錯。 |
“wb”(只寫) | 為了輸出資料,開啟一個二進位制檔案。如不存在,則建一個新檔案。 |
“ab”(追加) | 向一個二進位制檔案尾新增資料。如不存在,則出錯。 |
“r+”(讀寫) | 開啟一個檔案進行更新(輸入和輸出)。如不存在則出錯。 |
“w+”(讀寫) | 建一個空檔案並開啟它以進行更新(輸入和輸出)。如果同名檔案已經存在,則將丟棄其內容,並且該檔案將被視為新的空檔案。 |
“a+”(讀寫) | 開啟一個檔案,在檔案尾進行讀寫。如不存在建立一個新檔案。 |
以下是對檔案操作的一般流程。
#include <stdio.h> #include <string.h> #include <errno.h> int main() { //開啟檔案 FILE* pf = fopen("data.txt", "r"); if (pf == NULL) { printf("%sn", strerror(errno)); return 0; } //對檔案進行一系列操作 ...... ..... //關閉檔案 fclose(pf); pf = NULL;置空 return 0; }
到此這篇關於C語言由淺入深講解檔案的操作上篇的文章就介紹到這了,更多相關C語言 檔案操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45