之前我們已經(jīng)完成了錄入數(shù)據(jù)和查詢數(shù)據(jù)的工作,不過當(dāng)我們關(guān)掉程序再重新打開的時(shí)候,之前錄入的數(shù)據(jù)就都不存在了婚陪。這當(dāng)然不能滿足我們的要求。
在軟件設(shè)計(jì)中频祝,如果要實(shí)現(xiàn)重啟程序或者重啟電腦依然能夠恢復(fù)之前的數(shù)據(jù)泌参,那么我們需要在程序退出前把需要保存的數(shù)據(jù)記錄在文件中。今天我們就來說說C語言操作文件的那些事兒常空。
文件操作方法
文件操作總共分三步:
- 打開文件
- 讀寫操作
- 關(guān)閉文件
C語言中沽一,使用FILE類型管理文件。
1. 打開文件
我們可以調(diào)用系統(tǒng)函數(shù)fopen來打開文件漓糙。
fopen的原型是:
FILE *fopen(const char *filename,const char *mode)
功能:
打開一個(gè)流铣缠,把一個(gè)文件和此流相連接,給此流返回一個(gè)FILR指針昆禽。filename指向要打開的文件名蝗蛙,mode表示打開狀態(tài)的字符串,其取值如下:
- "r" 以只讀方式打開文件
- "w" 以只寫方式打開文件
- "a" 以追加方式打開文件
- "r+" 以讀/寫方式打開文件醉鳖,如無文件出錯(cuò)
- "w+" 以讀/寫方式打開文件捡硅,如無文件生成新文件
成功返回文件指針,失敗返回NULL
代碼如下:
// 以文本形式打開一個(gè)用于寫的文件
FILE *fp = fopen("book.txt", "w");
if (fp == NULL)
{
exit(0);
}
或
// 以文本形式打開一個(gè)用于讀的文件
FILE *fp = fopen("book.txt", "r");
if (fp == NULL)
{
exit(0);
}
注意盗棵,用來讀和寫的文件打開時(shí)傳入的參數(shù)不同病曾。
2. 讀寫文件
- 讀文件 fread()
這是一個(gè)比較常用的讀文件接口,它的功能是從文件中讀取一段數(shù)據(jù)漾根。
char pBuf[1024];
fread(pBuf, sizeof(char), 10 , fp);
這兩句的意思是從fp指向的文件中讀取10個(gè)字符的數(shù)據(jù)保存在pBuf中。
- 寫文件 fwrite()
這個(gè)函數(shù)負(fù)責(zé)把一段數(shù)據(jù)寫在文件中鲫竞。
char pBuf[] = "Hello World";
fwire(pBuf, sizeof(char), 11, fp);
這兩句的意思是把pBuf中的數(shù)據(jù)寫入fp指向的文件中辐怕。
3. 關(guān)閉文件
調(diào)用fclose函數(shù)關(guān)閉之前打開的數(shù)據(jù)流。
fclose(fp);
文件操作功能封裝
為了方便我們后面在項(xiàng)目中方便地使用這些功能从绘,我們把文件操作模塊封裝在一組文件中寄疏。代碼如下:
-
MyFile.h
#ifndef __MY_FILE_H__ #define __MY_FILE_H__ #include <stdio.h> #define FOR_READ 0 #define FOR_WRITE 1 FILE* fp; extern int OpenFile(char* pFileName, int nOperate); extern void CloseFile(); extern char* ReadLine(); extern int WriteLine(char* pLine); #endif
-
MyFile.c
#include "MyFile.h" #include "string.h" #define BUF_SIZE 100 char pBuf[BUF_SIZE]; int OpenFile(char* pFileName, int nOperate) { switch (nOperate) { case FOR_READ: fp = fopen(pFileName, "r"); break; case FOR_WRITE: fp = fopen(pFileName, "w+"); break; default: break; } return 1; } void CloseFile() { fflush(fp); fclose(fp); } char* ReadLine() { fread(pBuf, sizeof(char), 100, fp); return pBuf; } int WriteLine(char* pLine) { fwrite(pLine, sizeof(char), strlen(pLine), fp); fwrite("\n", sizeof(char), 1, fp); return 1; }
在CloseFile中是牢,我們?cè)陉P(guān)閉文件之后,通過fflush()函數(shù)把緩沖區(qū)中的數(shù)據(jù)寫在文件中陕截。
代碼調(diào)用
如何使用這組函數(shù)呢驳棱?我們來看下面這段代碼:
#include "stdio.h"
#include "MyFile.h"
int main()
{
OpenFile("a.txt", FOR_WRITE);
WriteLine("ABCD");
CloseFile();
OpenFile("a.txt", FOR_READ);
char* pLine = ReadLine();
printf("%s\n", pLine);
CloseFile();
return 0;
}
這段代碼的功能是打開一個(gè)文件“a.txt”之后寫入一個(gè)字符串,之后再讀出來打印在屏幕上农曲。
今天就到這里社搅,下一篇中,我們用這個(gè)模塊完成數(shù)據(jù)的保存和讀取功能乳规。
我是天花板形葬,讓我們一起在軟件開發(fā)中自我迭代。
如有任何問題暮的,歡迎與我聯(lián)系笙以。