iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
佛心分享-IT 人自學之術

C++探險家系列 第 16

Day 16 輸出入與檔案操作

  • 分享至 

  • xImage
  •  

首先,先介紹處理文字檔案所需要的一些基本概念

在C語言中,處理文字檔案I/O涉及以下重點:

  1. 檔案操作函數
    打開檔案:使用 fopen 函數來打開檔案,返回 FILE 指標。需要指定檔案名稱和打開模式,如 "r"(讀取)、"w"(寫入)、"a"(追加)等。
    關閉檔案:使用 fclose 函數關閉檔案,釋放系統資源。

  2. 讀取和寫入資料
    讀取資料
    fgetc:讀取單個字符。
    fgets:讀取一行文字,適合於讀取有換行符的行。
    fread:讀取二進制資料,用於從檔案中讀取指定數量的數據。
    寫入資料
    fputc:寫入單個字符。
    fputs:寫入一行文字,無換行符。
    fwrite:寫入二進制資料,用於將指定數量的數據寫入檔案。

  3. 檔案位置管理
    設定和獲取位置
    fseek:設定檔案位置指標,控制從檔案開頭或指定位置的偏移量。
    ftell:獲取當前檔案指標的位置。
    rewind:重置檔案指標至檔案開頭。

  4. 錯誤處理
    檢查錯誤狀態
    feof:檢查是否已達到檔案末尾。
    ferror:檢查檔案操作是否發生錯誤。
    clearerr:清除檔案流的錯誤標誌和檔案結尾標誌。

  5. 檔案打開模式
    "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章前半段做學習!!今天蠻順利的,明天繼續加油囉~


上一篇
Day 15 基本程式練習實作
下一篇
Day 17 程式練習
系列文
C++探險家30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言