白騎士的C++教學高級篇 3.1 文件操作

系列目錄

上一篇:白騎士的C++教學進階篇 2.4 標準模板庫(STL)

????????文件操作是C++編程中的一個重要部分,允許程序與外部存儲設備進行交互,從而實現數據的持久化存儲和讀取。C++標準庫提供了豐富的文件操作功能,包括文件的讀寫、文件流和二進制文件操作。本篇博客將詳細介紹這些內容,幫助您掌握C++文件操作的基本技巧。

文件的讀寫

????????C++標準庫中的文件讀寫通過文件流(file stream)實現。文件流分為輸入文件流(ifstream)和輸出文件流(ofstream),分別用于從文件讀取數據和向文件寫入數據。

文件寫入

????????首先,讓我們看看如何使用‘ofstream‘類向文件寫入數據。‘ofstream‘類用于創建文件并寫入數據。如果文件不存在,它會創建文件;如果文件已經存在,它會覆蓋文件內容。例如:

#include <iostream>
#include <fstream>
#include <string>int main() {std::ofstream outFile("example.txt");if (outFile.is_open()) {outFile << "Hello, World!" << std::endl;outFile << "This is a test file." << std::endl;outFile << "C++ file operations are easy to learn." << std::endl;outFile.close();std::cout << "Data written to file successfully." << std::endl;} else {std::cerr << "Unable to open file for writing." << std::endl;}return 0;
}

????????在上面的代碼中,我們使用‘ofstream‘創建了一個名為‘example.txt‘的文件,并向文件中寫入了幾行文本。最后關閉文件流。

文件讀取

????????接下來,讓我們看看如何使用 ‘ifstream‘ 類從文件讀取數據。‘ifstream‘ 類用于打開文件并讀取數據,例如:

#include <iostream>
#include <fstream>
#include <string>int main() {std::ifstream inFile("example.txt");std::string line;if (inFile.is_open()) {while (getline(inFile, line)) {std::cout << line << std::endl;}inFile.close();} else {std::cerr << "Unable to open file for reading." << std::endl;}return 0;
}

????????在上面的代碼中,我們使用 ‘ifstream‘ 打開了一個名為 ‘example.txt‘ 的文件,并逐行讀取文件內容,打印到標準輸出。

文件流

????????C++標準庫提供了一個更通用的文件流類——‘fstream‘,它既可以用于文件讀取,也可以用于文件寫入。通過指定文件流的打開模式,可以實現不同的文件操作需求。

文件流的打開模式

????????‘fstream‘類的打開模式包括:

  • ios::in:打開文件用于讀取。
  • ios::out:打開文件用于寫入。
  • ios::app:打開文件用于追加寫入。
  • ios::ate:文件打開后定位到文件末尾。
  • ios::trunc:如果文件存在,打開時清空文件內容。
  • ios::binary:以二進制模式打開文件。

示例代碼

????????下面的示例代碼展示了如何使用‘fstream‘類同時進行文件的讀寫操作:

#include <iostream>
#include <fstream>
#include <string>int main() {std::fstream file("example.txt", std::ios::in | std::ios::out | std::ios::app);if (file.is_open()) {// 寫入數據file << "Appending a new line to the file." << std::endl;// 定位到文件開頭file.seekg(0);// 讀取數據std::string line;while (getline(file, line)) {std::cout << line << std::endl;}file.close();} else {std::cerr << "Unable to open file." << std::endl;}return 0;
}

????????在上面的代碼中,我們使用 ‘fstream‘ 類打開了一個名為 ‘example.txt‘ 的文件,以讀取、寫入和追加模式打開文件。首先,我們向文件中追加了一行文本,然后定位到文件開頭,并逐行讀取文件內容,打印到標準輸出。

二進制文件操作

????????除了處理文本文件,C++還可以處理二進制文件。二進制文件操作通常用于存儲非文本數據,如圖像、音頻、視頻等。與文本文件不同,二進制文件的讀寫操作必須使用二進制模式。

二進制文件寫入

????????下面的示例代碼展示了如何使用‘ofstream‘類以二進制模式向文件寫入數據:

#include <iostream>
#include <fstream>int main() {std::ofstream outFile("example.bin", std::ios::binary);if (outFile.is_open()) {int numbers[] = {1, 2, 3, 4, 5};outFile.write(reinterpret_cast<char*>(numbers), sizeof(numbers));outFile.close();std::cout << "Binary data written to file successfully." << std::endl;} else {std::cerr << "Unable to open file for writing." << std::endl;}return 0;
}

????????在上面的代碼中,我們使用 ‘ofstream‘ 類以二進制模式創建了一個名為 ‘example.bin‘ 的文件,并向文件中寫入了一個整數數組。‘reinterpret_cast<char*>(numbers)‘ 用于將整數數組的指針轉換為字符指針,以便寫入二進制數據。

二進制文件讀取

????????接下來,讓我們看看如何使用‘ifstream‘類以二進制模式從文件讀取數據,代碼如下:

#include <iostream>
#include <fstream>int main() {std::ifstream inFile("example.bin", std::ios::binary);if (inFile.is_open()) {int numbers[5];inFile.read(reinterpret_cast<char*>(numbers), sizeof(numbers));for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;inFile.close();} else {std::cerr << "Unable to open file for reading." << std::endl;}return 0;
}

????????在上面的代碼中,我們使用 ‘ifstream‘ 類以二進制模式打開了一個名為 ‘example.bin‘ 的文件,并從文件中讀取了一個整數數組。‘reinterpret_cast<char*>(numbers)‘ 用于將整數數組的指針轉換為字符指針,以便讀取二進制數據。

總結

????????文件操作是C++編程中的一個重要部分,通過文件的讀寫、文件流和二進制文件操作,程序可以實現數據的持久化存儲和讀取。掌握這些基本技巧,將能夠處理各種類型的文件,滿足不同的編程需求。希望通過本篇博客的介紹,你能更好地理解和應用C++的文件操作,為編寫復雜和高效的C++程序打下堅實的基礎。

下一篇:白騎士的C++教學高級篇 3.2 多線程與并發???????

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

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

相關文章

嵌入式香橙派人工智能AI開發板詳細操作與遠程聊天實現

大家好&#xff0c;今天給大分享一個OrangePi AIpro&#xff08;20T&#xff09;采用昇騰作為主控芯片的開發板&#xff0c;開箱以及對應功能的詳細實現。 第一&#xff1a;板子基本介紹 接通電源給對應的開發板上電&#xff0c;觀察其中的現象&#xff0c;如下&#xff1a; 注…

基于HAL庫的stm32的OLED顯示屏顯示(IIC)

OLED OLED&#xff0c;即有機發光二極管( Organic Light Emitting Diode )。OLED由于同時具備自發光&#xff0c;不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板、使用溫度范圍廣、構造及制程較簡單等優異之特性&#xff0c;被認為是下一代的平面顯示器…

龍國專利局瑞數6

聲明(lianxi a15018601872) 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 前言(lianxi a…

富文本中提取信息并去除其中的HTML或XML標簽

要從富文本中提取信息并去除其中的HTML或XML標簽&#xff0c;可以使用不同的編程語言和庫。以下是一些流行語言中的示例方法&#xff1a; 1. Python&#xff08;使用BeautifulSoup&#xff09; BeautifulSoup是一個強大的Python庫&#xff0c;用于從HTML或XML文件中提取數據。…

巨魔商店(TrollStore)介紹與使用指南

iOS巨魔商店&#xff08;TrollStore&#xff09;介紹與使用指南 引言 在iOS系統中&#xff0c;App Store是官方唯一的應用下載渠道&#xff0c;但這也限制了用戶獲取非官方或破解版應用的可能性。然而&#xff0c;巨魔商店&#xff08;TrollStore&#xff09;的出現打破了這一…

配置和保護SSH

使用SSH訪問遠程命令行 描述Secure Shell SSH&#xff08;Secure Shell&#xff09; 是一種網絡協議&#xff0c;用于在不安全的網絡上安全地進行系統管理和數據傳輸。它最初由 Tatu Ylnen 于1995年設計&#xff0c;并成為保護網絡服務免受攻擊的標準。SSH提供了多種功能&…

開始構建我們自己的大語言模型:數據處理部分

關注本專欄&#xff08;NLP簡論&#xff1a;手搓大語言模型實踐&#xff09; 繼續學習從頭編寫、訓練自己的大語言模型。 接上集&#xff0c;本章我們將深入說一下大語言模型數據處理部分的細節&#xff0c;并直接提供本部分的完整代碼。 【配套資源】 暫時的詞匯表&#xff1…

GNN論文粗讀

論文 文章目錄 論文基于異構圖的GNN論文GNN領域論文環境領域GNN論文 隨緣更新 基于異構圖的GNN論文 Distance Information Improves Heterogeneous Graph Neural Networks:DOI: 10.1109/TKDE.2023.3300879 轉導和歸納任務&#xff0c;創新點&#xff1a;異構距離編碼HDE提高GN…

關于Vue中涉及到大量數據的級聯菜單樹狀結構的數據多選勾選頁面卡頓卡死問題

項目場景&#xff1a;如題 提示&#xff1a;有個需求&#xff0c;級聯菜單樹狀結構的數據高達3萬多條&#xff0c;多選&#xff0c;只需要最后一層級value 原因分析&#xff1a;頁面一下子渲染大量數據會導致瀏覽器內存暴漲100%&#xff0c;導致頁面卡死&#xff0c;而且eleme…

常見Linux目錄和配置文件

目錄 /boot/&#xff1a;開機配置文件&#xff0c;也是存放核心vmlinuz的地方 /bin/&#xff1a;系統可執行文件目錄&#xff0c;CentOS7后合并到/usr/bin中&#xff0c;并鏈接過去 /sbin/&#xff1a;系統管理員常用指令存放目錄&#xff0c;例如開關機、磁盤分區等指令&am…

基于SpringBoot+Vue的廣場舞團系統(帶1w+文檔)

基于SpringBootVue的廣場舞團系統(帶1w文檔) 基于SpringBootVue的廣場舞團系統(帶1w文檔) 廣場舞團&#xff0c;為用戶隨時隨地查看廣場舞團信息提供了便捷的方法&#xff0c;更重要的是大大的簡化了管理員管理廣場舞團信息的方式方法&#xff0c;更提供了其他想要了解廣場舞團…

基于Trace的類型特化動態語言JIT編譯

文章目錄 Explain一、簡介二、一個跟蹤運行的示例三、跟蹤樹3.1 Traces類型特化&#xff08;Type specialization&#xff09; 3.2 Trace Trees3.3 黑名單&#xff08;Blacklisting&#xff09; 四、嵌套跟蹤樹4.1 Nesting Algorithm4.2 Blacklisting with Nesting 五、跟蹤樹優…

Java NIO 面試題及答案整理,最新面試題

Java NIO中的Buffer有哪些主要類型? Java NIO中的Buffer用于與NIO通道進行交互,作為基本的數據容器。主要類型包括: 1、ByteBuffer: 最常用的類型,用于存儲字節數據。 2、CharBuffer: 用于存儲字符數據。 3、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、Short…

【Pytorch】一文向您詳細介紹 torch.randn_like()

&#x1f389;&#x1f525;【Pytorch】一文向您詳細介紹 torch.randn_like() &#x1f525;&#x1f389; 下滑即可查看博客內容 &#x1f308; 歡迎蒞臨我的個人主頁 &#x1f448;這里是我靜心耕耘深度學習領域、真誠分享知識與智慧的小天地&#xff01;&#x1f387; …

滑動窗口題目

題目描述&#xff1a; 計算兩個字符串str1和str2在給定的含有n個元素的字符串數組strs中出現的最短距離。 詳細解釋&#xff1a; 定義整數變量n&#xff0c;用于存儲字符串數組strs的長度。定義一個vector<string>類型的變量strs&#xff0c;用于存儲輸入的字符串。定義…

破解反爬蟲策略 /_guard/auto.js(一) 原理

背景 當用代碼或者postman訪問一個網站的時候&#xff0c;訪問他的任何地址都會返回<script src"/_guard/auto.js"></script>&#xff0c;但是從瀏覽器中訪問顯示的頁面是正常的&#xff0c;這種就是網站做了反爬蟲策略。本文就是帶大家來破解這種策略&…

輕松搞定一鍵切換主題色?分享 1 段優質 CSS 代碼片段!

本內容首發于工粽號&#xff1a;程序員大澈&#xff0c;每日分享一段優質代碼片段&#xff0c;歡迎關注和投稿&#xff01; 大家好&#xff0c;我是大澈&#xff01; 本文約 800 字&#xff0c;整篇閱讀約需 1 分鐘。 今天分享一段優質 CSS 代碼片段&#xff0c;輕松實現一鍵切…

4.3 最小二乘近似

一、最小二乘解 A x b A\boldsymbol x\boldsymbol b Axb 經常無解&#xff0c;一般是因為方程太多了。矩陣 A A A 的行比列要多&#xff0c;即方程要多余未知數&#xff08; m > n m>n m>n&#xff09;。 n n n 個列只能張成 m m m 空間的一小部分&#xff0c;除非…

spring中的依賴注入

文章目錄 spring中的依賴注入一、Autowired二、Qualifier三、Resource四、總結 spring中的依賴注入 這里主要講述三個注解裝配 一、Autowired 作用&#xff1a;自動按照類型注入。只要容器中唯一的一個bean對象類型和要注入的變量類型匹配&#xff0c;就可以注入成功。 如果i…

MySQL5.7社區版本在CentOS7系統上的安裝

MySQL5.7社區版本在CentOS7系統上的安裝 1.配合yum倉庫 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm 2.使用yum安裝MySQL5.7 yum -y install mysql-community-server 3.安裝…