首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 探索之旅(十):文件讀寫完全指南 —— 浩瀚數據,隨心馳騁

     編輯:關於C++

課程簡介

本課為「C++ 探索之旅」第一部分第 10 課,主題為文件讀寫。前序課程已涵蓋變量、流程控制、函數、數組等基礎,掌握文件 I/O 後,程序將具備持久化數據能力,邁向真實應用開發。

核心概念:流

C++ 以流抽象輸入輸出操作:

  • cin/cout:標準輸入/輸出流(<iostream>)
  • ifstream/ofstream:文件輸入/輸出流(<fstream>)

文件流操作與控制台流高度一致,學習成極低。

寫入文件

1. 引入頭文件與建立輸出流

#include <fstream>
#include <string>

std::string fileName = "C:/Cpp/Files/scores.txt";
std::ofstream outFile(fileName.c_str());  // C++11 可直接傳 string
// 或分步:ofstream outFile; outFile.open(fileName);

路徑可用絕對路徑或相對路徑。目錄必須預先存在,文件不存在會自動創建。

2. 檢查文件打開狀態

if (!outFile) {
    std::cerr << "無法打開文件:" << fileName << std::endl;
    return 1;
}

3. 寫入數據

outFile << "大家好,我是被寫入文件的一句話。" << std::endl;
outFile << 3.14159 << std::endl;
int age = 25;
outFile << "我 " << age << " 歲了。" << std::endl;

<< 運算符重載支援基本類型與字串,用法與 cout 完全一致。

4. 追加模式

std::ofstream outFile(fileName, std::ios::app);  // 追加而非覆蓋

讀取文件

1. 建立輸入流

std::ifstream inFile(fileName);
if (!inFile) { /* 錯誤處理 */ }

2. 三種讀取方式

方式函數/運算符適用場景
逐行std::getline(inFile, line)文本行處理,保留空格
逐詞inFile >> word以空白分隔的 token 讀取
逐字符inFile.get(ch)含空白、換行的逐字符處理

3. 完整讀取範例

std::string line;
while (std::getline(inFile, line)) {  // getline 返回流引用,隱式轉 bool
    std::cout << line << std::endl;
    // 處理每行數據...
}

4. 切換讀取模式注意事項

從 >> 切換到 getline 時需清除殘留換行符:

inFile >> word;
inFile.ignore();  // 忽略下一個字符(通常是換行符)
std::getline(inFile, line);

進階技巧

1. 顯式關閉/延遲打開

outFile.close();  // 提前關閉
// 或
std::ofstream outFile;
outFile.open(fileName);  // 延遲打開

通常不需要,RAII 機制保證析構時自動關閉。

2. 文件指標控制

操作輸入流輸出流
獲取當前位置tellg()tellp()
移動位置seekg(offset, origin)seekp(offset, origin)

origin 可為 std::ios::beg(開頭)、std::ios::cur(當前)、ios::end(結尾)。

3. 獲取文件大小

inFile.seekg(0, std::ios::end);
std::streampos size = inFile.tellg();  // 文件字節數

總結

  • 文件 I/O 核心:<fstream>、ifstream/ofstream
  • 操作語法與 cin/cout 幾乎相同
  • 善用 getline 處理文本行,>> 處理格式化數據
  • RAII 自動管理資源,手動 close 多為特殊需求

下一課預告

第 11 課:小練習 —— 猜單詞遊戲,綜合運用數組、文件、隨機數等知識,開發完整小程序。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved