讀文件步驟
#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++讀取配置文件的基本步驟如下:
使用標準庫中的fstream頭文件打開配置文件;
逐行讀取文件內容,根據具體需求解析每一行數據;
關閉文件。
以下是一個簡單的示例代碼:
#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博客