C++ 文件操作-文本文件-讀取和打開文件方法詳解

讀文件步驟

#include <iostream>
using namespace std;
#include <fstream>
#include <string>
//文本文件 讀文件void test(){// 1 包含頭文件// 2 創建流對象ifstream ifs;// 3 打開文件 并且判斷是否打開成功ifs.open("table.txt",ios::in); //文件名+打開方式//判斷if (!ifs.is_open()) {cout << "文件打開失敗" << endl;return; //如果打開文件失敗,就不再往下進行}// 4 讀數據 4種方式,推薦前三種/*     //方式一char buf[1024] = {0}; //創建一個字符數組,全部初始化為0,用以保存讀到的文件數據//table.txt只有三行數據,用while循環,將ifs中的數據通過右移運算符 >> 放到buf中while (ifs >> buf) {   //當數據一行一行全部讀到手即退出循環cout << buf << endl; //查看數據是否一行一行讀進去。} *//*     //方式二char buf[1024] = {0};//利用ifs里面的成員函數getline(獲取一行)  while(ifs.getline(buf,sizeof(buf))){//getline 第一個參數為存放數據的地址,第二個參數為最多需要讀取多少字節數,此處我們準備1024個字節空間cout << buf << endl;} *//*     //方式三string buf;//將數據存放到c++ 中的字符串中while (getline(ifs,buf)) //使用全局的getline()函數,其里面第一個參數代表輸入流對象,第一個參數代表準備好的字符串,每次讀取一行內容到buf{cout << buf << endl;} *///方式四,逐個字符讀效率低,不推薦使用char c; //逐個字符的讀取,放入c中while ((c = ifs.get())!= EOF)   //get()函數通過循環每次就讀一個字符,并將讀到的字符放到c中,最后判斷是否讀到文件尾EOF(end of file),如果沒有繼續讀,讀到則退出。{cout<< c;}// 5 關閉文件ifs.close();
}int main(){test();return 0;
}

補充

ifstream類的對象創建成功的時候會返回非空值,借此判斷是否創建文件對象成功

寫法一:#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {//   const string table = "table1.txt"; //open filed//   可執行程序目錄下沒有此文件const string table = "table.txt";//打開文件方式一://   ifstream ifs(table);//利用構造函數打開文件,打開模式默認ios::in//打開文件方式二:ifstream ifs;             //先創建流對象,不先綁定文件ifs.open(table, ios::in); //通過流對象中的open()函數打開文件 文件名稱+打開模式if (!ifs) {               //判斷打開文件是否成功cout << "open filed" << endl;} else {string buf; //創建字符串存取讀到的數據while (getline(ifs, buf)) {cout << buf << endl; //一行一行讀取到buf中,遇到空格會跳躍}ifs.close(); //讀取完畢關閉文件}return 0;
}
寫法二:#include <iostream>
#include <fstream> // 包含fstream頭文件
using namespace std;int main() {
//讀文件時 定義流對象,也可以通過構造函數打開文件,打開模式默認ios::inifstream file("table.txt"); // 打開名為"table.txt"的文本文件 文件名可以相對也可以絕對//判斷是否打開文件寫法另一種寫法  if(!file){cout<<"open fail"<<endl;}if (file) { // 如果成功打開了文件string line;while(getline(file, line)) { // 逐行讀取文件內容并存入字符串變量line中cout << line << endl; // 輸出每一行內容到控制臺}file.close(); // 關閉文件} else {cerr << "無法打開文件!" << endl; // 若無法打開文件則輸出錯誤信息}return 0;
}

打開文件方式補充說明 1

打開文件的放法:

打開文件方式補充說明 2

//打開文件
#include <iostream>
#include <fstream>
using namespace std;
int main()
{ifstream inFile;          //流類ifstream 建立讀取數據的文件流對象inFile.open("c:\\tmp\\test.txt", ios::in);   //調用流對象的 open 成員函數打開準備讀取的
//文件。參數是文件名和打開模式                   if (inFile)  //判斷流對象名的表達式,若果為真true,條件成立,則說明文件打開成功inFile.close();   //關閉文件時,調用文件流對象的 close 成員函數即可。 elsecout << "test.txt doesn't exist" << endl;ofstream oFile;       //流類ofstream  建立寫入數據的文件流對象oFile.open("test1.txt", ios::out);      //調用流對象的 open 成員函數打開準備寫入數據的文
//件。參數是文件名和打開模式                   if (!oFile)  //判斷流對象名的表達式,條件成立(PS:注意此處是!非),則說明文件打開出錯cout << "error 1" << endl;elseoFile.close();  //關閉文件時,調用文件流對象的 close 成員函數即可。oFile.open("tmp\\test2.txt", ios::out | ios::in);  //第二個參數打開模式是  打開已存在的
//文件,既可讀取其內容,也可向其寫入數據。文件剛打開時,原有內容保持不變。如果文件不存在,則打開
//出錯。if (oFile)  //條件成立,則說明文件打開成功oFile.close();elsecout << "error 2" << endl;fstream ioFile;    //流類fstreamioFile.open("..\\test3.txt", ios::out | ios::in | ios::trunc);//第二參數打開模式是   打
//開文件,既可讀取其內容,也可向其寫入數據。如果文件本來就存在,則打開時清除原來的內容;如果文件
//不存在,則新建該文件。if (!ioFile)cout << "error 3" << endl;elseioFile.close();return 0;
}

讀取ini類型配置文件

C++讀取配置文件的基本步驟如下:

  1. 使用標準庫中的fstream頭文件打開配置文件;

  2. 逐行讀取文件內容,根據具體需求解析每一行數據;

  3. 關閉文件。

以下是一個簡單的示例代碼:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{// 打開配置文件ifstream config_file("config.txt");if (!config_file.is_open()){cerr << "Failed to open config file." << endl;return -1;}// 逐行讀取并解析數據string line;while (getline(config_file, line)){// 如果是注釋或空行,則忽略if (line.empty() || line[0] == '#')continue;// 解析key-value對size_t pos = line.find('=');if (pos != string::npos){string key = line.substr(0, pos);string value = line.substr(pos + 1);cout << "Key: " << key << ", Value: " << value << endl;}}// 關閉文件config_file.close();return 0;
}

在這個示例中,我們假設配置文件中的每一行都是形如“key=value”的格式,程序會讀取并輸出每一對鍵值對。其中,“#”開頭的行視為注釋或空行,會被忽略。

本文僅為學習回顧,對基礎代碼做記錄。

參考:62 C++文件操作-文本文件-讀文件_嗶哩嗶哩_bilibili?

c++:文件操作1 文件的打開_c++打開文件-CSDN博客

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

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

相關文章

VS 2015 發布 WebService

本文介紹了使用VS2015發布WebService的步驟 右鍵項目點擊發布 選擇文件系統和目標位置 配置選擇Debug-Any CPU&#xff08;選其他也可以&#xff09; 4. 點擊發布&#xff0c;在對應文件夾中可以看到發布出來的內容。 記錄遇到的問題&#xff0c; 發布前要選擇刪除所有現有文…

【PostgreSQL】PostgreSQL詳細介紹

PostgreSQL詳細介紹 一、什么是PostgreSQL&#xff1f;二、為什么要使用PostgreSQL&#xff1f;三、PostgreSQL功能列表3.1 數據類型3.2 數據完整性3.3 并發&#xff0c;性能3.4 可靠性、災難恢復3.5 安全3.6 可擴展性3.7 國際化&#xff0c;文本搜索 四、參考資料 關于Postgre…

使用MongoDB數據庫和Mongoose庫在Node.js中進行數據存儲

在Node.js中使用MongoDB數據庫和Mongoose庫進行數據存儲是前端開發中常用的技術之一。MongoDB是一種非關系型數據庫&#xff0c;具有高性能、易擴展等優點&#xff1b;而Mongoose是在Node.js中對MongoDB進行操作的框架&#xff0c;簡化了數據庫操作&#xff0c;并提供了豐富的功…

音視頻技術-雙聲道立體聲與卡儂平衡線的“糾葛”

目錄 一、新問題 二、問題排查 三、故障總結 四、原理分析 五、解決方案 1、救急 2、轉接線1 3、轉接線2

Js的 Promise的 then catch 筆記240222

Js的 Promise的 then catch 筆記240222 基本用法 new Promise(f>{setTimeout(ev>{f("一秒后輸出控制臺");},1000); }).then(f的參數>{console.log(f的參數); }); // 控制臺輸出: 一秒后輸出控制臺上面代碼中, f 的標準名叫做 resolve , 所以應該寫成 new …

知識圖譜數據處理流程是什么

在當今信息時代&#xff0c;數據已經成為企業決策和業務發展的重要驅動力。然而&#xff0c;隨著數據量的不斷增加&#xff0c;傳統的數據處理方法已經難以滿足需求。知識圖譜作為一種新興的技術&#xff0c;正逐漸成為處理大規模數據的關鍵工具。本文將深入探討知識圖譜的數據…

寫代碼中的一些“小技巧”

目錄 前言 1.不注重代碼格式 1.1 空格 1.2 換行 2.隨意的命名 2.1 有意義的參數名 2.2 見名知意 2.3 參數名風格一致 3.出現大量重復代碼 4.從不寫注釋 5.方法過長 6.參數過多 7.代碼層級太深 8.判斷條件太多 9.硬編碼 10.事務過大 11.在循環中遠程調用 11.1 …

CSS 面試題匯總

CSS 面試題匯總 1. 介紹下 BFC 及其應 參考答案&#xff1a; 參考答案&#xff1a; 所謂 BFC&#xff0c;指的是一個獨立的布局環境&#xff0c;BFC 內部的元素布局與外部互不影響。 觸發 BFC 的方式有很多&#xff0c;常見的有&#xff1a; 設置浮動overflow 設置為 auto、scr…

Swift基礎知識:20.Swift方法

在 Swift 中&#xff0c;方法是與特定類型相關聯的函數。方法可以用于實例類型&#xff08;實例方法&#xff09;或類型本身&#xff08;類型方法&#xff09;。方法允許類型的實例執行特定的任務&#xff0c;也可以修改實例本身或實例的屬性。 實例方法&#xff08;Instance …

【力扣hot100】刷題筆記Day10

前言 一鼓作氣把鏈表給刷完&#xff01;&#xff01;中等題困難題沖沖沖啊啊啊&#xff01; 25. K 個一組翻轉鏈表 - 力扣&#xff08;LeetCode&#xff09; 模擬 class Solution:def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:# 翻轉…

題記(46)--兩個多項式的和

目錄 一、題目內容 二、輸入描述 三、輸出描述 四、輸入輸出示例 五、完整C語言代碼 一、題目內容 輸入兩個多項式&#xff0c;計算它們的和。 每個多項式有若干對整數表示&#xff0c;每組整數中&#xff0c;第一個整數表示系數&#xff08;非0&#xff09;&#xff0c;第…

#LLM入門|Prompt#1.7_文本拓展_Expanding

輸入簡短文本&#xff0c;生成更加豐富的長文。 “溫度”&#xff08;temperature&#xff09;&#xff1a;控制文本生成的多樣性。 一、定制客戶郵件 根據客戶的評價和其中的情感傾向&#xff0c;使用大語言模型針對性地生成回復郵件。將大大提升客戶滿意度。 # 我們可以在…

云原生 - K8s命令合集

我是南城余&#xff01;阿里云開發者平臺專家博士證書獲得者&#xff01; 歡迎關注我的博客&#xff01;一同成長&#xff01; 一名從事運維開發的worker&#xff0c;記錄分享學習。 專注于AI&#xff0c;運維開發&#xff0c;windows Linux 系統領域的分享&#xff01; 知…

兩種動態代理(可以看到代理類的樣子,方便理解)

這里寫目錄標題 jdk動態代理例子CGlib動態代理例子手寫spring中的事務部分自定義注解版aop實現方式 Spring的兩大重點&#xff0c;IOC和AOP&#xff0c;今天我們就來學AOP&#xff0c;眾所周知AOP的底層是動態代理&#xff0c;讓我們看一下這兩種動態代理的區別。 例子&#x…

tvm交叉編譯android可執行參考資料整理

主要參考這個&#xff1a; TVM部署神經網絡模型到android端_tvm android-CSDN博客 其他相關鏈接&#xff1a; TVM部署神經網絡模型到android端 - 代碼先鋒網 Ubuntu交叉編譯 arm板子上的TVM_tvm arm-CSDN博客 TVM部署神經網絡模型到android端 - 代碼先鋒網 tvm部署c神經網…

【Spring連載】使用Spring Data訪問 MongoDB(五)----生命周期事件

【Spring連載】使用Spring Data訪問 MongoDB&#xff08;五&#xff09;----生命周期事件Lifecycle Events 一、實體回調Entity Callbacks1.1 實現實體回調1.2 注冊實體回調 二、特定存儲的實體回調 一、實體回調Entity Callbacks 1.1 實現實體回調 1.2 注冊實體回調 二、特…

【結合OpenAI官方文檔】解決Chatgpt的API接口請求速率限制

OpenAI API接口請求速率限制 速率限制以五種方式衡量&#xff1a;RPM&#xff08;每分鐘請求數&#xff09;、RPD&#xff08;每天請求數&#xff09;、TPM&#xff08;每分鐘令牌數&#xff09;、TPD&#xff08;每天令牌數&#xff09;和IPM&#xff08;每分鐘圖像數&#x…

BUUCTF第二十四、二十五題解題思路

目錄 第二十四題CrackRTF 第二十五題[2019紅帽杯]easyRE1 第二十四題CrackRTF 查殼 無殼&#xff0c;32位&#xff0c;用32位IDA打開&#xff0c;打開后的main函數很短&#xff0c;可以找到一句“jmz _main_0”——跳轉到 _main_0&#xff0c;說明真正的主函數是_main_0&am…

React 模態框的設計(二)

自定義組件是每個前端開發者必備的技能。我們在使用現有框架時難免有一些超乎框架以處的特別的需求&#xff0c;比如關于彈窗&#xff0c;每個應用都會用到&#xff0c;但是有時我們使用的框架中提供的彈窗功能也是功能有限&#xff0c;無法滿足我們的應用需求&#xff0c;今天…

【linux】使用 acme.sh 實現了 acme 協議生成免費的SSL 證書

acme.sh 實現了 acme 協議, 可以從 letsencrypt 生成免費的證書. 主要步驟: 安裝 acme.sh生成證書copy 證書到 nginx/apache 或者其他服務更新證書更新 acme.sh出錯怎么辦, 如何調試 下面詳細介紹. 1. 安裝 acme.sh 安裝很簡單, 一個命令: curl https://get.acme.sh | sh…