读文件步骤
#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::in ifstream 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 成员函数即可。 else cout << "test.txt doesn't exist" << endl; ofstream oFile; //流类ofstream 建立写入数据的文件流对象 oFile.open("test1.txt", ios::out); //调用流对象的 open 成员函数打开准备写入数据的文 //件。参数是文件名和打开模式 if (!oFile) //判断流对象名的表达式,条件成立(PS:注意此处是!非),则说明文件打开出错 cout << "error 1" << endl; else oFile.close(); //关闭文件时,调用文件流对象的 close 成员函数即可。 oFile.open("tmp\\test2.txt", ios::out | ios::in); //第二个参数打开模式是 打开已存在的 //文件,既可读取其内容,也可向其写入数据。文件刚打开时,原有内容保持不变。如果文件不存在,则打开 //出错。 if (oFile) //条件成立,则说明文件打开成功 oFile.close(); else cout << "error 2" << endl; fstream ioFile; //流类fstream ioFile.open("..\\test3.txt", ios::out | ios::in | ios::trunc);//第二参数打开模式是 打 //开文件,既可读取其内容,也可向其写入数据。如果文件本来就存在,则打开时清除原来的内容;如果文件 //不存在,则新建该文件。 if (!ioFile) cout << "error 3" << endl; else ioFile.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博客