C++ 文本讀寫與二進制讀寫的底層機制

1.文件的打開方式

1.文本打開

在windows中,寫入時會將\n換成\r\n,讀出時\r\n會讀出\n

linux對\n讀寫不做處理

2.二進制打開

對\n讀寫不做處理

2.文本讀寫

1.數據要先變成字符串再寫進緩沖區

2.字符串直接寫進緩沖區就是

3.c++對文本讀寫的支持

istream/ostream中重載了對內置類型的<<和>>,可以把內置類型變成字符串再寫入緩沖區

對于自定義類型,需要用友元自己重載<<和>>

3.二進制讀寫

1.直接對字節進行讀寫

2.c++對二進制讀寫的支持

istream/ostream的write可以從特定位置讀n個字節并寫入,read可以從緩沖區讀n個字節寫入所給的緩沖區

4.文件打開方式和文件讀寫方式不一樣

看了上面我們就能發現,文件的打開方式和真實文件讀寫方式其實還真可以不一樣,打開方式只會影響\n并且還只有windows文本打開時有這個破規矩,而真實讀寫方式實際上是由讀寫時調用的接口決定的,調的是<<和>>這種會進行把數據變成字符串的接口那不就是文本讀寫,調的是write和read這種對字節直接進行讀寫的接口,那不就是二進制讀寫嗎?

當然你像如果是讀寫字符串那不管是<<還是write實際上都一樣

盡管可以打開方式和讀寫方式不一樣,但我們推薦對應著用

C++語言中的文本讀寫和二進制讀寫接口

C++通過標準庫<fstream>提供了更面向對象的文件讀寫方式,比C語言的接口更加類型安全且易于使用。以下是主要的接口:

文本讀寫接口

  1. 文件流類

    • std::ifstream?- 輸入文件流(用于讀取)

    • std::ofstream?- 輸出文件流(用于寫入)

    • std::fstream?- 輸入輸出文件流

  2. 常用文本讀寫方法

    • operator<<?- 格式化輸出(寫入)

    • operator>>?- 格式化輸入(讀取)

    • getline(istream&, string&)?- 讀取一行到string

    • get()?- 讀取單個字符

    • put()?- 寫入單個字符

  3. 狀態檢查

    • good()?- 流狀態正常

    • eof()?- 到達文件末尾

    • fail()?- 操作失敗

    • bad()?- 嚴重錯誤

二進制讀寫接口

  1. 二進制模式打開

    • 使用std::ios::binary標志打開文件

  2. 二進制讀寫方法

    • read(char* s, streamsize n)?- 讀取二進制數據

    • write(const char* s, streamsize n)?- 寫入二進制數據

  3. 文件定位

    • seekg()/seekp()?- 設置讀/寫位置

    • tellg()/tellp()?- 獲取讀/寫位置

通用文件操作

  1. 文件打開/關閉

    • open()?- 打開文件

    • close()?- 關閉文件

    • 構造函數中直接指定文件名打開

  2. 模式標志

    • in?- 讀模式

    • out?- 寫模式

    • app?- 追加模式

    • trunc?- 截斷模式

    • binary?- 二進制模式

    • text- 文本模式(默認模式)

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

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

相關文章

02 mysql 管理(Windows版)

一、啟動及關閉 MySQL 服務器 1.1 通過 “服務” 管理工具 winr打開運行&#xff0c;輸入services.msc 找到MySQL80&#xff0c;這個是我們在安裝mysql的時候給的服務的名稱&#xff0c;具體見文章mysql 安裝 右鍵選擇啟動或者停止。 1.2 通過命令提示符 1.2.1 關閉命令…

Elasticsearch知識匯總之 ElasticSearch高可用方案

六 ElasticSearch高可用方案 6.1 高可用架構 請求協調節點根據負載均衡&#xff0c;轉發給主分片節點&#xff0c;主分片同步復制給從節點&#xff0c;主從節點都寫入完成返回客戶端請求成功。對于讀請求&#xff0c;協調負載到任意節點數據節點&#xff0c;數據節點把各自符合…

H5 移動端適配最佳實踐落地指南。

文章目錄 前言一、為什么需要移動端適配&#xff1f;二、核心適配方案1. 視口&#xff08;Viewport&#xff09;設置2. 三種適配方案 &#xff08;僅供參考&#xff09;&#xff08;1&#xff09;rem 適配方案&#xff08;2&#xff09;vw/vh 適配方案&#xff08;3&#xff09…

MySQL初階:數據庫約束和表的設計

數據庫約束 數據庫約束是針對數據庫中的表中的數據進行施加規則和條件&#xff0c;用于確保數據的準確性和可靠性。 數據庫約束類型 1&#xff09;not null 非空類型 &#xff1a;指定非空類型的列不能存儲null&#xff0c;如果插入的數據是null便會報錯。 2&#xff09;de…

LVGL- 按鈕矩陣控件

1 按鈕矩陣控件 lv_btnmatrix 是 LVGL&#xff08;Light and Versatile Graphics Library&#xff09; v8 中提供的一個非常實用的控件&#xff0c;用于創建帶有多個按鈕的矩陣布局。它常用于實現虛擬鍵盤、數字鍵盤、操作面板、選擇菜單等場景&#xff0c;特別適用于嵌入式設…

excel 批量導出圖片并指定命名

一、開發環境 打開excel文件中的宏編輯器和JS代碼調試 工具-》開發工具-》WPS宏編輯器 左邊是工程區&#xff0c;當打開多個excel時會有多個&#xff0c;要注意不要把代碼寫到其他工作簿去了 右邊是代碼區 二、編寫代碼 宏是js語言&#xff0c;因此變量或者方法可以網上搜…

yolov5基礎--yolov5源碼閱讀(common.py)

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 博主簡介&#xff1a;努力學習的22級本科生一枚 &#x1f31f;?&#xff1b;探索AI算法&#xff0c;C&#xff0c;go語言的世界&#xff1b;在迷茫中尋找光芒…

5.0.5 變換(旋轉、縮放、扭曲)

WPF變換可以產生特殊效果,如平移、旋轉、扭曲。 變換類 描述TranslateTransform沿著X軸和Y軸平移ScaleTransform 沿著定義的中心點縮放RotateTransform沿著定義的中心點旋轉SkewTransform 扭曲元素MatrixTransfrom提供3x3矩陣,用于定義一個自定義變換 1…

如何設置內網映射端口到外網訪問?哪些軟件可以進行端口映射?

大多數時候我們所使用的服務器都是在內網搭建的&#xff0c;而且內網是可以訪問外網的&#xff0c;但外網是沒法直接訪問內網IP和端口服務的。也就是說外網無法直接訪問到內網的網絡地址&#xff0c;需要大家去搭建一個內外網互通的橋梁&#xff0c;把內網服務器指定端口映射到…

養生:塑造健康生活的良方

養生是一場貫穿生活的自我關愛行動&#xff0c;從飲食、運動、睡眠到心態調節&#xff0c;每一個環節都對健康有著深遠影響。以下為你帶來全面且實用的養生策略。 飲食養生&#xff1a;科學搭配&#xff0c;呵護腸胃 合理規劃三餐&#xff0c;遵循 “早營養、午均衡、晚清淡”…

YOLOv12云端GPU谷歌免費版訓練模型

1.效果 2.打開 https://colab.research.google.com/?utm_sourcescs-index 3.上傳代碼 4.解壓 !unzip /content/yolov12-main.zip -d /content/yolov12-main 5.進入yolov12-main目錄 %cd /content/yolov12-main/yolov12-main 6.安裝依賴庫 !pip install -r requirements.…

機器人手臂的坐標變換:一步步計算齊次矩陣過程 [特殊字符]

大家好!今天我們來學習如何計算機器人手臂的坐標變換。別擔心,我會用最簡單的方式解釋這個過程,就像搭積木一樣簡單! 一、理解問題 我們有一個機器人手臂,由多個關節組成。每個關節都有自己的坐標系,我們需要計算從世界坐標系(W)到末端執行器(P?)的完整變換。 二、已…

CSS中的@import指令

一、什么是import指令&#xff1f; import 是CSS提供的一種引入外部樣式表的方式&#xff0c;允許開發者在CSS文件中引入其他CSS文件&#xff0c;或者在HTML的<style>標簽中引入外部樣式。與常見的<link>標簽相比&#xff0c;import 提供了一種更“CSS原生”的樣式…

[學成在線]23-面試題總結

1. 詳細說說你的項目吧 從以下幾個方面進行項目介紹: 項目的背景&#xff0c;包括: 是自研還是外包、什么業務、服務的客戶群是誰、誰去運營等問題。項目的業務流程項目的功能模塊項目的技術架構個人工作職責個人負責模塊的詳細說明&#xff0c;包括模塊的設計&#xff0c;所…

C++編程語言:標準庫:標準庫概觀(Bjarne Stroustrup)

第30章 標準庫概觀(Standard-Library Overview) 目錄 30.1 引言 30.1.1 標準庫設施 30.1.2 設計約束 30.1.3 描述風格 30.2 頭文件 30.3 語言支持 30.3.1 對initializer_list的支持 30.3.2 對范圍for的支持 30.4 異常處理 30.4.1 異常 30.4.1…

spring5.x講解介紹

Spring 5.x 是 Spring Framework 的重要版本升級&#xff0c;全面擁抱現代 Java 技術棧&#xff0c;其核心改進涵蓋響應式編程、Java 8支持、性能優化及開發模式創新。以下從特性、架構和應用場景三個維度詳細解析&#xff1a; 一、核心特性與架構改進 Java 8 全面支持 Spring …

【C++進階】第2課—多態

文章目錄 1. 認識多態2. 多態的定義和實現2.1 構成多態的必要條件2.2 虛函數2.3 虛函數的重寫或覆蓋2.4 協變(了解)2.5 析構函數的重寫2.6 override和final關鍵字2.7 重載、重寫、隱藏對比 3. 純虛函數和抽象類4. 多態原理4.1 虛函數表指針4.2 多態的實現4.3 靜態綁定和動態綁定…

Dive into LVGL (1) —— How LVGL works from top to down

0.briefly speaking 由于工作原因&#xff0c;最近開始接觸到一些圖形圖像處理相關的知識&#xff0c;在這個過程中逐漸接觸到了LVGL。作為一個開源的圖形庫&#xff0c;LVGL可以高效地為MCU、MPU等嵌入式設備構建美觀的UI界面。我的手頭也正好有一塊集成了Vivante 2.5D GPU的…

【HarmonyOS 5】鴻蒙中進度條的使用詳解

【HarmonyOS 5】鴻蒙中進度條的使用詳解 一、HarmonyOS中Progress進度條的類型 HarmonyOS的ArkUI框架為開發者提供了多種類型的進度條&#xff0c;每種類型都有其獨特的樣式&#xff0c;以滿足不同的設計需求。以下是幾種常見的進度條類型&#xff1a; 線性進度條&#xff08;…

OpenHarmony 開源鴻蒙南向開發——linux下使用make交叉編譯第三方庫——gmp

準備工作 請依照這篇文章搭建環境 OpenHarmony 開源鴻蒙南向開發——linux下使用make交叉編譯第三方庫——環境配置_openharmony交叉編譯-CSDN博客 下載 wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz 解壓 tar -xf gmp-6.3.0.tar.xzcd gmp-6.3.0/ 環境變量 e…