c語言中沒有輸入輸出語句,所有的輸入輸出功能都用 ansi c提供的一組標準庫函式來實現。檔案操作標準庫函式有:
檔案的開啟操作 :fopen
file * fopen(char *filename, char *mode);
檔案的關閉操作 :fclose
int fclose(file *fp);
表1 mode模式 模式
含 義說 明r唯讀
檔案必須存在,否則開啟失敗w只寫
若檔案存在,則清除原檔案內容後寫入;否則,新建檔案後寫入
a追加只寫
若檔案存在,則位置指標移到檔案末尾,在檔案尾部追加寫人,故該方式不 刪除原檔案資料;若檔案不存在,則開啟失敗
r+讀寫
檔案必須存在。在唯讀 r 的基礎上加 '+' 表示增加可寫的功能。下同
w+讀寫
新建乙個檔案,先向該檔案中寫人資料,然後可從該檔案中讀取資料
a+讀寫
在」 a」模式的基礎上,增加可讀功能
rb二進位制讀
功能同模式」r」,區別:b表示以二進位制模式開啟。下同
wb二進位制寫
功能同模式「w」。二進位制模式
ab二進位制追加
功能同模式」a」。二進位制模式
rb+二進位制讀寫
功能同模式"r+」。二進位制模式
wb+二進位制讀寫
功能同模式」w+」。二進位制模式
ab+二進位制讀寫
功能同模式」a+」。二進位制模式
返回值:開啟成功,返回該檔案對應的 file 型別的指標;開啟失敗,返回 null。故需定義 file 型別的指標變數,儲存該函式的返回值。可根據該函式的返回值判斷檔案開啟是否成功。
檔案的讀寫操作:
fgetc 從檔案中讀取乙個字元:int fgetc (file *fp);
putc 寫乙個字元到檔案中去:int fputc (int c, file *fp);
fgets 從檔案中讀取乙個字串:char * fgets (char *s, int size, file * fp);
fputs 寫乙個字串到檔案中去:int fputs (const char *str, file *fp);
fprintf 往檔案中寫格式化資料:int fscanf (檔案指標,格式控制串,輸入位址表列);
fscanf 格式化讀取檔案中資料:int fprintf (檔案指標,格式控制串,輸出表列);
fread 以二進位制形式讀取檔案中的資料:unsigned fread (void *buf, unsigned size, unsigned count, file* fp);
fwrite 以二進位制形式寫資料到檔案中去:unsigned fwrite (const void *bufaunsigned size,unsigned count,file* fp);
介紹如何從檔案讀取流和向檔案寫入流。這就需要用到 c++ 中另乙個標準庫fstream,它定義了三個新的資料型別:
資料型別
描述ofstream
該資料型別表示輸出檔案流,用於建立檔案並向檔案寫入資訊。
ifstream
該資料型別表示輸入檔案流,用於從檔案讀取資訊。
fstream
該資料型別通常表示檔案流,且同時具有 ofstream 和 ifstream 兩種功能,這意味著它可以建立檔案,向檔案寫入資訊,從檔案讀取資訊。
要在 c++ 中進行檔案處理,必須在 c++ 源**檔案中包含標頭檔案 和 。
開啟檔案:
在從檔案讀取資訊或者向檔案寫入資訊之前,必須先開啟檔案。ofstream和fstream物件都可以用來開啟檔案進行寫操作,如果只需要開啟檔案進行讀操作,則使用ifstream物件。
下面是 open() 函式的標準語法,open() 函式是 fstream、ifstream 和 ofstream 物件的乙個成員。
void open(const char *filename, ios::openmode mode);
在這裡,open()成員函式的第一引數指定要開啟的檔案的名稱和位置,第二個引數定義檔案被開啟的模式。
模式標誌
描述追加模式。所有寫入都追加到檔案末尾。
ios::ate
檔案開啟後定位到檔案末尾。
ios::in
開啟檔案用於讀取。
ios::out
開啟檔案用於寫入。
ios::trunc
如果該檔案已經存在,其內容將在開啟檔案之前被截斷,即把檔案長度設為 0。
讀取方式:
(1)逐詞讀取
void readdatafromfile()
cout << endl;
}
(2) 逐行讀取
void readdatafromfile()
}
回車輸入結束
通過cin.get()檢測回車字元,判斷輸入結束。
string value;
while (std::cin >> value)
;#endif //!__config_file_reader_h__
configfilereader.cpp
#include "configfilereader.h"
#include //for snprintf
#include cconfigfilereader::cconfigfilereader(const char* filename)
cconfigfilereader::~cconfigfilereader()
char* cconfigfilereader::getconfigname(const char* name)
return value;
}int cconfigfilereader::setconfi**alue(const char* name, const char* value)
else
return _writefile();
}void cconfigfilereader::_loadfile(const char* filename)
fclose(fp);
m_load_ok = true;
}int cconfigfilereader::_writefile(const char* filename)
else
if (fp == null)
char szpaire[128];
std::map::iterator it = m_config_map.begin();
for (; it != m_config_map.end(); it++) }
fclose(fp);
return 0;
}void cconfigfilereader::_parseline(char* line)
}char* cconfigfilereader::_trimspace(char* name)
if (strlen(start_pos) == 0)
return null;
// remove ending space or tab
char* end_pos = name + strlen(name) - 1;
while ((*end_pos == ' ') || (*end_pos == '\t'))
int len = (int)(end_pos - start_pos) + 1;
if (len <= 0)
return null;
return start_pos;
}
main.cpp
#include #include #include "configfilereader.h"
using namespace std;
int main(void)
cout <<"read context ; "<< logfilepath << endl;
getchar();
return 0;
}
C C 字串處理函式
c include 1.字串長度 extern int strlen char s 返回s的長度,不包括結束符null 2.字串比較 extern int strcmp char s1,char s2 extern int strncmp char s1,char s2,int n 比較字串s1和s...
C C 字串處理函式
c char st 100 1.字串長度 strlen st 2.字串比較 strcmp st1,st2 strncmp st1,st2,n 把st1,st2的前n個進行比較。3.附加 strcat st1,st2 strncat st1,st2,n n表示連線上st2的前n個給st1,在最後不要加...
C C 字串處理函式
c char st 100 1.字串長度 strlen st 2.字串比較 strcmp st1,st2 strncmp st1,st2,n 把st1,st2的前n個進行比較。3.附加 strcat st1,st2 strncat st1,st2,n n表示連線上st2的前n個給st1,在最後不要加...