C++读写文件与行定位教程

4星 · 超过85%的资源 需积分: 10 5 下载量 128 浏览量 更新于2024-09-17 收藏 56KB DOC 举报
"C++语言提供了多种方式来读写文件,包括通过标准库中的fstream类。本文将介绍两种常见的方法,一个是逐行读取并输出文件内容,另一个是逐字符处理文件,尤其关注如何在遇到换行符时进行特殊处理。" 在C++中,读写文件通常涉及到`<fstream>`库,它提供了`ifstream`(输入文件流)和`ofstream`(输出文件流)类,用于文件操作。以下两个示例分别展示了不同的文件处理方式: **方法一:逐行读取和输出** ```cpp #include <fstream> #include <iostream> #include <string> using namespace std; int main() { string s; ifstream inf("in.txt"); ofstream outf("out.txt"); // 逐行读取in.txt文件内容 while (getline(inf, s)) { outf << s << '\n\n'; // 输出到out.txt,每行之间加一个空行 cout << s << endl << endl; // 在控制台同样输出 } inf.close(); outf.close(); return 0; } ``` 在这个例子中,`getline()`函数用于从输入文件流中读取一行内容并存储到字符串`s`中。由于`getline()`会自动移动文件指针到下一行,因此我们可以连续调用它来读取文件的每一行。读取后的数据会被写入到`out.txt`,并且每行之间增加一个额外的空行。 **方法二:逐字符处理** ```cpp #include <fstream> #include <iostream> using namespace std; int main() { ifstream inf("in.txt"); ofstream outf("out.txt"); inf >> noskipws; // 不忽略空白,包括换行符 char c; while (inf >> c) { if (c == '\n') { // 遇到换行符 outf << "\n\n"; // 写入到out.txt cout << "\n\n"; // 在控制台显示 } else { outf << c; // 写入到out.txt cout << c; // 控制台输出 } } inf.close(); outf.close(); return 0; } ``` 这种方法中,我们使用`>>`运算符逐个读取文件中的字符,包括换行符。`noskipws`是一个操纵符,用于指示流不跳过空白字符。当读取到换行符`\n`时,我们在输出文件和控制台添加两个额外的换行符以保持与原文件相同的格式。 这两种方法都有效地实现了从一个文件读取数据并将其写入另一个文件。选择哪种方法取决于你的具体需求,例如,如果你需要保留原始文件的行结构,那么方法一是更好的选择。如果需要更精细的字符级处理,例如过滤特定字符或者处理文本中的单词,那么方法二可能更为合适。无论哪种方法,确保在完成文件操作后关闭输入和输出文件流,以释放资源并确保数据完整写入。