cpp自學 day20(文件操作)

?基本概念

程序運行時產生的數據都屬于臨時數據,程序一旦運行結束都會被釋放

通過文件可以將數據持久化

C++中對文件操作需要包含頭文件 <fstream>

文件類型分為兩種:

  • 文本文件 - 文件以文本的ASCII碼形式存儲在計算機中
  • 二進制文件 - 文件以文本的二進制形式存儲在計算機中,用戶一般不能直接讀懂它們

操作文件的三大類:

????????1. ofstream:寫操作

????????2. ifstream:讀操作

????????3. fstream:讀寫操作

#include <fstream>  // 必須包含的頭文件
數據特性說明
程序運行時數據臨時數據,程序結束即釋放
文件持久化數據長期存儲在磁盤中

文件打開模式

模式標志功能描述
ios::in為讀取打開文件
ios::out為寫入打開文件
ios::ate初始定位到文件末尾
ios::app追加寫入模式
ios::trunc存在則清空重建
ios::binary二進制模式操作

文本文件

寫文件

void test01() {// 1. 包含頭文件(已在全局包含)// 2. 創建輸出流對象ofstream ofs;// 3. 指定打開方式(組合模式用 | 連接)ofs.open("test.txt", ios::out | ios::trunc);// 4. 寫入格式化數據ofs << "姓名:張三" << endl;  // 正確使用<<運算符ofs << "性別:男" << endl;ofs << "年齡:18" << endl;// 5. 關閉文件流ofs.close();
}

讀文件

基礎操作框架

#include <fstream>  // 必須包含的頭文件
#include <string>   // 字符串操作支持void readFileDemo() {// 1. 創建流對象ifstream ifs;// 2. 打開文件并驗證ifs.open("test.txt", ios::in);  // ios::in表示讀取模式if (!ifs.is_open()) {           // 必須檢查打開狀態cerr << "文件打開失敗" << endl;return;}// 3. 讀取數據(四種方式見下文)// 4. 關閉文件流ifs.close();
}

四種讀取方式對比

方式1:運算符重載讀取
char buf[1024] = {0};  // 1024為緩沖區長度
while (ifs >> buf) {   // 自動處理空格/換行分隔cout << buf << endl;
}

特點:

  • 自動按空白符分割內容
  • 緩沖區需預分配固定大小
  • 適合結構化數據讀取
方式2:getline成員函數
char buf[1024] = {0};
while (ifs.getline(buf, sizeof(buf))) {  // 流對象的成員函數cout << buf << endl;  // 自動處理換行符
}

特點:

  • 精確控制緩沖區大小
  • 自動去除換行符
  • 需注意緩沖區溢出風險
方式3:全局getline函數
string buf;
while (getline(ifs, buf)) {  // 使用string自動管理內存cout << buf << endl;     // 無長度限制
}

特點:

  • 自動管理內存
  • 無需擔心緩沖區溢出
  • 標準推薦方式
方式4:逐字符讀取
char c;
while ((c = ifs.get()) != EOF) {  // EOF檢測cout << c;  // 原樣輸出所有字符
}

特點:

  • 完全控制讀取過程
  • 適合二進制文件處理
  • 性能開銷較大

二進制文件

核心操作框架

#include <fstream>
#include <string>// 示例數據結構
struct PlayerData {int id;         // 4字節double score;   // 8字節char name[32];  // 32字節
}; // 總大小:44字節void binaryDemo() {// 創建流對象fstream file("game.dat", ios::binary | ios::out | ios::in);// 驗證文件狀態if (!file.is_open()) {cerr << "文件打開失敗" << endl;return;}// 讀寫操作(見下文示例)file.close();
}

讀寫文件

// 讀取基本類型
int loadedScore;
file.read(reinterpret_cast<char*>(&loadedScore), sizeof(int));// 讀取結構體(需內存對齊)
#pragma pack(push, 1)  // 1字節對齊
struct PackedData {short type;bool valid;// ...
};
#pragma pack(pop)PackedData data;
file.read(reinterpret_cast<char*>(&data), sizeof(PackedData));// 批量讀取
vector<PlayerData> players(10);
file.read(reinterpret_cast<char*>(players.data()), players.size() * sizeof(PlayerData));

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75447.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75447.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75447.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Gartner發布軟件供應鏈安全市場指南:軟件供應鏈安全工具的8個強制功能、9個通用功能及全球29家供應商

攻擊者的目標是由開源和商業軟件依賴項、第三方 API 和 DevOps 工具鏈組成的軟件供應鏈。軟件工程領導者可以使用軟件供應鏈安全工具來保護他們的軟件免受這些攻擊的連鎖影響。 主要發現 越來越多的軟件工程團隊現在負責解決軟件供應鏈安全 (SSCS) 需求。 軟件工件、開發人員身…

備賽藍橋杯-Python-考前突擊

額&#xff0c;&#xff0c;離藍橋杯開賽還有十個小時&#xff0c;最近因為考研復習節奏的問題&#xff0c;把藍橋杯的優先級后置了&#xff0c;突然才想起來還有一個藍橋杯呢。。 到目前為止python基本語法熟練了&#xff0c;再補充一些常用函數供明天考前再背背&#xff0c;算…

榕壹云外賣跑腿系統:基于Spring Boot+MySQL+UniApp的智慧生活服務平臺

項目背景與需求分析 隨著本地生活服務需求的爆發式增長&#xff0c;外賣、跑腿等即時配送服務成為現代都市的剛性需求。傳統平臺存在開發成本高、功能定制受限等問題&#xff0c;中小企業及創業團隊極需一款輕量級、可快速部署且支持二次開發的外賣跑腿系統。榕壹云外賣跑腿系統…

使用Docker安裝Gogs

1、拉取鏡像 docker pull gogs/gogs 2、運行容器 # 創建/var/gogs目錄 mkdir -p /var/gogs# 運行容器 # -d&#xff0c;后臺運行 # -p&#xff0c;端口映射&#xff1a;(宿主機端口:容器端口)->(10022:22)和(10880:3000) # -v&#xff0c;數據卷映射&#xff1a;(宿主機目…

【antd + vue】Modal 對話框:修改彈窗標題樣式、Modal.confirm自定義使用

一、標題樣式 1、目標樣式&#xff1a;修改彈窗標題樣式 2、問題&#xff1a; 直接在對應css文件中修改樣式不生效。 3、原因分析&#xff1a; 可能原因&#xff1a; 選擇器權重不夠&#xff0c;把在控制臺找到的選擇器直接復制下來&#xff0c;如果還不夠就再加&#xff…

Streamlit在測試領域中的應用:構建自動化測試報告生成器

引言 Streamlit 在開發大模型AI測試工具方面具有顯著的重要性&#xff0c;尤其是在簡化開發流程、增強交互性以及促進快速迭代等方面。以下是幾個關鍵點&#xff0c;說明了 Streamlit 對于構建大模型AI測試工具的重要性&#xff1a; 1. 快速原型設計和迭代 對于大模型AI測試…

docker 運行自定義化的服務-后端

docker 運行自定義化的服務-前端-CSDN博客 運行自定義化的后端服務 具體如下&#xff1a; ①打包后端項目&#xff0c;形成jar包 ②編寫dockerfile文件&#xff0c;文件內容如下&#xff1a; # 使用官方 OpenJDK 鏡像 FROM jdk8:1.8LABEL maintainer"ATB" version&…

解決java使用easyexcel填充模版后,高度不一致問題

自定義工具&#xff0c;可以通過獲取上一行行高設置后面所以行的高度 package org.springblade.modules.api.utils;import com.alibaba.excel.write.handler.RowWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.wr…

repo倉庫文件清理

1. repo 倉庫內文件清理 # 清理所有Git倉庫中的項目 repo forall -c git clean -dfx # 重置所有Git 倉庫中的項目 repo forall -c git reset --hard 解釋&#xff1a; repo forall -c git clean -dfx&#xff1a; repo forall 是一個用于在所有項目中執行命令的工具。-c 后…

結合大語言模型整理敘述并生成思維導圖的思路

楔子 我比較喜歡長篇大論。這在代理律師界被視為一種禁忌。 我高中一年級的時候因為入學成績好&#xff08;所在縣榜眼名次&#xff09;&#xff0c;直接被所在班的班主任任命為班長。我其實不喜歡這個崗位。因為老師一來就要提前注意到&#xff0c;要及時喊“起立”、英語課…

spark-core編程2

Key-Value類型&#xff1a; foldByKey 當分區內計算規則和分區間計算規則相同時&#xff0c;aggregateByKey 就可以簡化為 foldByKey combineByKey 最通用的對 key-value 型 rdd 進行聚集操作的聚集函數&#xff08;aggregation function&#xff09;。類似于aggregate()&…

原理圖設計準備:頁面柵格模板應用設置

一、頁面大小的設置 &#xff08;1&#xff09;單頁原理圖頁面設置 首先&#xff0c;選中需要更改頁面尺寸的那一頁原理圖&#xff0c;鼠標右鍵&#xff0c;選擇“Schmatic Page Properties”選項&#xff0c;進行頁面大小設置。 &#xff08;2&#xff09;對整個原理圖頁面設…

關于異步消息隊列的詳細解析,涵蓋JMS模式對比、常用組件分析、Spring Boot集成示例及總結

以下是關于異步消息隊列的詳細解析&#xff0c;涵蓋JMS模式對比、常用組件分析、Spring Boot集成示例及總結&#xff1a; 一、異步消息核心概念與JMS模式對比 1. 異步消息核心組件 組件作用生產者發送消息到消息代理&#xff08;如RabbitMQ、Kafka&#xff09;。消息代理中間…

【深度洞察】解碼飲料行業破局點:場景革命

當東鵬特飲以 “大瓶裝 防塵蓋” 精準解決貨車司機的場景化需求&#xff0c;當農夫山泉通過 “冷藏版東方樹葉” 打開年輕白領的早餐場景 —— 這些現象級案例背后&#xff0c;是飲料行業底層邏輯的深刻變革&#xff1a;真正的市場增量&#xff0c;藏在對消費場景的極致拆解中…

二、TorchRec中的分片

TorchRec中的分片 文章目錄 TorchRec中的分片前言一、Planner二、EmbeddingTable 的分片TorchRec 中所有可用的分片類型列表 三、使用 TorchRec 分片模塊進行分布式訓練TorchRec 在三個主要階段處理此問題 四、DistributedModelParallel&#xff08;分布式模型并行&#xff09;…

如何在 Spring Boot 項目中使用 MyBatis 進行批量操作以提升性能?

MyBatis 提供了 ExecutorType.BATCH 類型&#xff0c;允許將多個 SQL 語句進行組合&#xff0c;最后統一執行&#xff0c;從而減少數據庫的訪問頻率&#xff0c;提升性能。 以下是如何在 Spring Boot 項目中使用 MyBatis 進行批量操作的關鍵點&#xff1a; 1. 配置 MyBatis 使…

Redis 字符串(String)詳解

1. 什么是字符串類型 在 Redis 中&#xff0c;字符串&#xff08;String&#xff09; 是最基本的數據類型。它可以包含任何數據&#xff0c;比如文本、JSON、甚至二進制數據&#xff08;如圖片的 Base64 編碼&#xff09;&#xff0c;最大長度為 512 MB。 字符串在 Redis 中不…

Elasticsearch 系列專題 - 第四篇:聚合分析

聚合(Aggregation)是 Elasticsearch 的強大功能之一,允許你對數據進行分組、統計和分析。本篇將從基礎到高級逐步講解聚合的使用,并結合實際案例展示其應用。 1. 聚合基礎 1.1 什么是聚合(Aggregation)? 聚合是對文檔集合的統計分析,類似于 SQL 中的 GROUP BY 和聚合…

YOLO學習筆記 | YOLOv8 全流程訓練步驟詳解(2025年4月更新)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 這里寫自定義目錄標題 一、數據準備1. 數據標注與格式轉換2. 配置文件生…

context上下文(一)

創建一個基礎的context 使用BackGround函數&#xff0c;BackGround函數原型如下&#xff1a; func Background() Context {return backgroundCtx{} } 作用&#xff1a;Background 函數用于創建一個空的 context.Context 對象。 context.Background() 函數用于獲取一個空的 cont…