目录
1、读取文件的指定行
(1)main函数中直接读
(2)封装成函数
① 无返回值类型
② 直接返回读取的内容
2、求文件的行数
3、文件内容读取成一个字符串
1、读取文件的指定行
(1)main函数中直接读
#include <iostream>
#include <fstream>
#include <string>int main() {// 要读取的行号,例如第5行int line_number = 5;int i = 0; std::ifstream file("G:/MyCode/c++/test.dump");if (file.is_open()) {std::string line;// 从1开始计数,因为行号通常是从1开始的while (std::getline(file, line)) {++i;if (i == line_number) {// 成功读取了目标行std::cout << "Line " << line_number << ": " << line << std::endl;break; // 找到目标行后退出循环}}if (i != line_number) {std::cerr << "Could not find line " << line_number << std::endl;}file.close();} else {std::cerr << "Unable to open file" << std::endl;}return 0;
}
(2)封装成函数
① 无返回值类型
#include <iostream>
#include <fstream>
#include <string>// 函数声明,只接受行号 n 作为参数
void readSpecificLineFromFile(int n);int main() {int line_number = 5; // 要读取的行号readSpecificLineFromFile(line_number);return 0;
}// 函数定义,读取并输出第 n 行的内容
void readSpecificLineFromFile(int n) {std::ifstream file("G:/MyCode/c++/test.dump");int current_line = 0;if (file.is_open()) {std::string line;while (std::getline(file, line)) {++current_line;if (current_line == n) {std::cout << "Line " << n << ": " << line << std::endl;file.close();return;}}std::cerr << "Could not find line " << n << std::endl;file.close();} else {std::cerr << "Unable to open file" << std::endl;}
}
② 直接返回读取的内容
#include <iostream>
#include <fstream>
#include <string>
using namespace std;// 函数声明,只接受行号 n 作为参数
std::string readLineFromFile(int n);int main() {int line_number = 5; // 要读取的行号std::string line= readLineFromFile(line_number);cout << line <<endl;return 0;
}// 函数定义,读取并输出第 n 行的内容
std::string readLineFromFile(int n) {std::ifstream file("G:/MyCode/c++/test.dump");int current_line = 0;std::string line;std::string lineContent;if (!file.is_open()) {std::cerr << "Unable to open file" << std::endl;return ""; // 返回空字符串表示文件无法打开}while (std::getline(file, line)) {++current_line;if (current_line == n) {lineContent = line;break;}}file.close(); // 确保文件被关闭return lineContent; // 返回找到的行内容,或空字符串表示未找到
}
2、求文件的行数
#include <iostream>
#include <fstream>
#include <string>// 函数声明
int countLines(const std::string& filename);int main() {int lineCount = countLines("1.dump");if (lineCount > 0) {std::cout << "The file '1.dump' has " << lineCount << " lines." << std::endl;} else {std::cerr << "The file '1.dump' could not be opened or is empty." << std::endl;}return 0;
}// 函数定义
int countLines(const std::string& filename) {std::ifstream file(filename);int lineCount = 0;// 检查文件是否成功打开if (file) {std::string line;// 逐行读取文件直到文件末尾while (std::getline(file, line)) {++lineCount;}} else {// 如果文件无法打开,返回0表示没有行lineCount = 0;}// 关闭文件file.close();// 返回文件的行数return lineCount;
}
3、文件内容读取成一个字符串
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <stdexcept>// 函数声明,读取文件并将其内容合并为一个字符串
std::string readAndConcatenateDumpFile(const std::string& filename);int main() {try {std::string filename = "1.dump"; // 文件路径std::string fileContents = readAndConcatenateDumpFile(filename);// 打印文件内容,这里仅打印前100个字符作为示例std::cout << "Contents of file '" << filename << "':" << std::endl;std::cout << fileContents << std::endl;} catch (const std::runtime_error& e) {std::cerr << "Error: " << e.what() << std::endl;return 1; // 非正常退出,返回错误码}return 0; // 正常退出
}// 函数定义,读取文件并将其内容合并为一个字符串
std::string readAndConcatenateDumpFile(const std::string& filename) {std::ifstream file(filename);if (!file.is_open()) {throw std::runtime_error("Failed to open the dump file.");}std::stringstream ss;std::string line;while (std::getline(file, line)) {ss << line;}file.close();return ss.str();
}
最近在用C++写指令文件的解码和状态机转换,其中的一些函数,供大家参考。
后续相关的会更新在文章中。