首先,先介紹處理文字檔案所需要的一些基本概念
在C語言中,處理文字檔案I/O涉及以下重點:
檔案操作函數:
打開檔案:使用 fopen
函數來打開檔案,返回 FILE
指標。需要指定檔案名稱和打開模式,如 "r"
(讀取)、"w"
(寫入)、"a"
(追加)等。
關閉檔案:使用 fclose
函數關閉檔案,釋放系統資源。
讀取和寫入資料:
讀取資料:fgetc
:讀取單個字符。fgets
:讀取一行文字,適合於讀取有換行符的行。fread
:讀取二進制資料,用於從檔案中讀取指定數量的數據。
寫入資料:fputc
:寫入單個字符。fputs
:寫入一行文字,無換行符。fwrite
:寫入二進制資料,用於將指定數量的數據寫入檔案。
檔案位置管理:
設定和獲取位置:fseek
:設定檔案位置指標,控制從檔案開頭或指定位置的偏移量。ftell
:獲取當前檔案指標的位置。rewind
:重置檔案指標至檔案開頭。
錯誤處理:
檢查錯誤狀態:feof
:檢查是否已達到檔案末尾。ferror
:檢查檔案操作是否發生錯誤。clearerr
:清除檔案流的錯誤標誌和檔案結尾標誌。
檔案打開模式:"r"
:只讀模式,檔案必須存在。"w"
:寫入模式,若檔案存在則覆蓋,若不存在則創建。"a"
:追加模式,寫入內容附加至檔案末尾。"r+"
:讀寫模式,檔案必須存在。"w+"
:讀寫模式,若檔案存在則覆蓋,若不存在則創建。"a+"
:讀寫追加模式,寫入內容附加至檔案末尾。
掌握這些概念能夠有效進行檔案讀寫操作和處理錯誤
小練習一(不同進位的文字輸出方式):
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
cout<<40<<endl
<<oct<<40<<endl
<<hex<<40<<endl
<<dec<<40<<endl;
return 0;
}
說明:
使用 cout
輸出不同進位制格式的數字。首先輸出十進制數字 40。接著,使用 oct
格式化為八進制,顯示為 50
。然後,使用 hex
格式化為十六進制,顯示為 28
。最後,使用 dec
恢復為十進制格式,顯示 40
。每次格式化後的數字以不同進位制顯示,並換行。
小練習二(文字檔的輸入輸出程式):
#include <iostream>
#include <fstream>
using namespace std;
int main(){
char ch;
ifstream fin;
fin.open("12-3-8.text");
if(!fin.is_open()){
cout<<"檔案開啟失敗"<<endl;
return 1;
}
while(!fin.eof()){
fin.get(ch);
cout<<ch;
}
fin.close();
return 0;
}
說明:
這段程式碼從檔案 12-3-8.text
讀取字符並顯示在螢幕上。首先,使用 ifstream
打開檔案。如果檔案無法打開,顯示錯誤訊息並返回 1
。然後,使用 while (!fin.eof())
迴圈讀取檔案中的每個字符,直到檔案結尾,並逐個顯示。最後,關閉檔案並返回 0
。
小練習三(檔案字數計算程式):
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
ifstream myfile("12-2-3.text");
if(!myfile.is_open()){
cout<<"檔案開啟失敗"<<endl;
return 1;
}
long begin, end;
char ch;
begin = myfile.tellg();
myfile.seekg(0, ios::end);
end=myfile.tellg();
cout<<"檔案大小:"<<endl-begin<<"bytes"<<endl;
cout<<"檔案內容:"<<endl;
myfile.seekg(0,ios::beg);
while(!myfile.eof()){
myfile.get(ch);
if(!myfile.efo())
cout<<ch;
}
myfile.close();
return 0;
}
說明:
這段程式碼開啟檔案 12-2-3.text
,若開啟失敗則顯示錯誤訊息並返回 1
。然後,使用 tellg()
和 seekg()
計算檔案大小,並顯示檔案內容。接著,使用 while (!myfile.eof())
讀取並顯示檔案內容。
!!今天進度是跟著第一次學C++就上手第二版第11章前半段做學習!!今天蠻順利的,明天繼續加油囉~