• C++
  • C++文件读写操作教程

  • @ 2025-4-14 20:41:08

以下是一个C++文件读写操作的教程:

相关头文件和类

  • 头文件:在C++ 中进行文件读写操作,需要包含<fstream>头文件。
  • 相关类:
    • ifstream:用于从文件中读取数据(输入文件流)。
    • ofstream:用于向文件中写入数据(输出文件流)。
    • fstream:既可以读取文件,也可以写入文件(输入输出文件流)。

文件打开与关闭

  • 打开文件:可以通过文件流对象的open成员函数来打开文件,打开文件时需要指定文件路径和打开模式。例如:
std::ifstream infile;
infile.open("example.txt", std::ios::in); // 以只读模式打开文件
  • 关闭文件:使用文件流对象的close成员函数关闭文件,以释放系统资源。例如:
infile.close();

文件写入操作

  • 写入文本文件:创建ofstream对象,指定打开模式为ios::out,如果文件不存在则创建,如果文件存在则覆盖原有内容。然后可以使用<<操作符将数据写入文件。示例如下:
#include <iostream>
#include <fstream>

int main() {
    std::ofstream outfile("output.txt");
    if (!outfile.is_open()) {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }
    outfile << "Hello, World!" << std::endl;
    outfile << "This is a test." << std::endl;
    outfile.close();
    return 0;
}
  • 写入二进制文件:打开文件时指定ios::binary模式,对于自定义数据类型,使用write成员函数将数据写入文件。示例如下:
#include <iostream>
#include <fstream>

class Person {
public:
    char name[64];
    int age;
};

int main() {
    Person p = { "张三", 18 };
    std::ofstream outfile("person.bin", std::ios::out | std::ios::binary);
    if (!outfile.is_open()) {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }
    outfile.write(reinterpret_cast<const char*>(&p), sizeof(Person));
    outfile.close();
    return 0;
}

文件读取操作

  • 读取文本文件:创建ifstream对象,以ios::in模式打开文件。可以使用>>操作符按格式读取数据,或者使用getline函数按行读取数据。示例如下:
#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ifstream infile("example.txt");
    if (!infile.is_open()) {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }
    std::string line;
    while (std::getline(infile, line)) {
        std::cout << line << std::endl;
    }
    infile.close();
    return 0;
}
  • 读取二进制文件:打开文件时指定ios::binary模式,使用read成员函数读取数据到缓冲区。示例如下:
#include <iostream>
#include <fstream>

class Person {
public:
    char name[64];
    int age;
};

int main() {
    Person p;
    std::ifstream infile("person.bin", std::ios::in | std::ios::binary);
    if (!infile.is_open()) {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }
    infile.read(reinterpret_cast<char*>(&p), sizeof(Person));
    infile.close();
    std::cout << "姓名:" << p.name << ", 年龄:" << p.age << std::endl;
    return 0;
}

文件定位

  • 移动文件指针:使用seekg(用于输入流)或seekp(用于输出流)函数来移动文件指针。例如,infile.seekg(10);将输入文件流的指针移动到第10个字节的位置。
  • 获取当前文件指针位置:使用tellg(用于输入流)或tellp(用于输出流)函数获取当前文件指针的位置。例如,int pos = infile.tellg();可以获取当前输入文件流指针的位置。

错误处理

  • 检查文件是否成功打开:在打开文件后,通过文件流对象的is_open成员函数检查文件是否成功打开。如果返回false,则表示打开失败,需要进行相应的错误处理。
  • 检查文件流状态:可以使用文件流对象的goodeoffailbad等成员函数来检查文件流的状态,以判断文件操作是否出现错误或到达文件末尾等情况。例如,while (!infile.eof())可以用于判断是否到达文件末尾。

20 条评论

  • @ 2025-5-18 14:25:29
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main() {
    	FILE* fin;
    	FILE* fout;
    	fin = fopen("in.txt","r");
    	fout = fopen("out.txt","w");
    	int sum = 0;
    	int a;
    	while(fscanf(fin,"%d",&a)==1){
    		sum += a;
    	}
    	fprintf(fout,"%d\n",sum);
    	
    	return 0;
    }
    
    • @ 2025-4-17 21:38:13
      #include <iostream>
      #include <fstream>
      
      int main() {
          // 打开一个名为 log.txt 的文件,用于写入日志信息
          std::ofstream log_file("log.txt");
          // 打开一个名为 input.txt 的文件,用于读取输入信息
          std::ifstream input_file("input.txt");
      
          // 保存当前标准输出流 cout 的缓冲区指针
          std::streambuf* org_cout = std::cout.rdbuf();
          // 保存当前标准输入流 cin 的缓冲区指针
          std::streambuf* org_cin = std::cin.rdbuf();
      
          // 将标准输出流 cout 的缓冲区设置为 log_file 的缓冲区,实现输出重定向
          std::cout.rdbuf(log_file.rdbuf());
          // 将标准输入流 cin 的缓冲区设置为 input_file 的缓冲区,实现输入重定向
          std::cin.rdbuf(input_file.rdbuf());
      
          std::string input_line;
          // 从重定向后的输入流(即 input_file)读取一行信息
          std::getline(std::cin, input_line);
          // 向重定向后的输出流(即 log_file)输出信息
          std::cout << "从文件读取的内容: " << input_line << std::endl;
      
          // 将标准输出流 cout 的缓冲区恢复为原来保存的缓冲区,恢复正常输出
          std::cout.rdbuf(org_cout);
          // 将标准输入流 cin 的缓冲区恢复为原来保存的缓冲区,恢复正常输入
          std::cin.rdbuf(org_cin);
      
          // 关闭文件
          log_file.close();
          input_file.close();
      
          return 0;
      }    
      

      若要在 C++ 里实现输入重定向,也就是把标准输入流 std::cin 重定向到文件,可参照输出重定向的思路,借助 std::streambuf 类达成。以下是在你给出的代码基础上添加输入重定向功能的示例: input-output-redirection C++ 输入输出重定向示例代码

      #include <iostream>
      #include <fstream>
      
      int main() {
          // 打开一个名为 log.txt 的文件,用于写入日志信息
          std::ofstream log_file("log.txt");
          // 打开一个名为 input.txt 的文件,用于读取输入信息
          std::ifstream input_file("input.txt");
      
          // 保存当前标准输出流 cout 的缓冲区指针
          std::streambuf* org_cout = std::cout.rdbuf();
          // 保存当前标准输入流 cin 的缓冲区指针
          std::streambuf* org_cin = std::cin.rdbuf();
      
          // 将标准输出流 cout 的缓冲区设置为 log_file 的缓冲区,实现输出重定向
          std::cout.rdbuf(log_file.rdbuf());
          // 将标准输入流 cin 的缓冲区设置为 input_file 的缓冲区,实现输入重定向
          std::cin.rdbuf(input_file.rdbuf());
      
          std::string input_line;
          // 从重定向后的输入流(即 input_file)读取一行信息
          std::getline(std::cin, input_line);
          // 向重定向后的输出流(即 log_file)输出信息
          std::cout << "从文件读取的内容: " << input_line << std::endl;
      
          // 将标准输出流 cout 的缓冲区恢复为原来保存的缓冲区,恢复正常输出
          std::cout.rdbuf(org_cout);
          // 将标准输入流 cin 的缓冲区恢复为原来保存的缓冲区,恢复正常输入
          std::cin.rdbuf(org_cin);
      
          // 关闭文件
          log_file.close();
          input_file.close();
      
          return 0;
      }    
      

      生成 input_output_redirection.cpp 代码解释: 文件打开:借助 std::ifstream 打开 input.txt 文件,用于读取输入内容;使用 std::ofstream 打开 log.txt 文件,用于写入日志信息。 保存原始缓冲区:分别保存 std::cin 和 std::cout 原来的缓冲区指针。 重定向输入输出:把 std::cin 的缓冲区设置为 input_file 的缓冲区,将 std::cout 的缓冲区设置为 log_file 的缓冲区。 读写操作:运用 std::getline 从 input_file 读取一行内容,然后将读取的内容和提示信息写入 log_file。 恢复原始缓冲区:在操作完成之后,把 std::cin 和 std::cout 的缓冲区恢复成原来的状态。 关闭文件:关闭打开的文件。 注意事项: 要保证 input.txt 文件存在,并且有可读权限。 重定向结束后,要记得恢复原始的缓冲区,不然后续的输入输出操作会受到影响。

      • @ 2025-4-17 21:23:55
        #include <iostream>
        #include<fstream> // 使用文件输入输出流,对 cin 、 cout 语句适用
        using namespace std;
        int main() {
        	// 打开一个名为 log.txt 的文件,用于写入日志信息
        	ofstream output("out.txt");
        	
        	// 保存当前标准输出流 cout 的缓冲区指针
        	streambuf* org_cout = cout.rdbuf();
        	
        	// 将标准输出流 cout 的缓冲区设置为 log_file 的缓冲区,实现输出重定向
        	cout.rdbuf(output.rdbuf());
        	
        	// 向重定向后的输出流(即 log_file)输出信息
        	cout << "Happy Spring!" << endl;
        	
        	// 将标准输出流 cout 的缓冲区恢复为原来保存的缓冲区,恢复正常输出
        	cout.rdbuf(org_cout);
        	
        	return 0;
        }
        
        
        • @ 2025-4-17 21:19:47

          ifstream:用于从文件读取数据,它继承自 istream 类。在默认情况下,ifstream 以输入(读取)模式打开文件,即 std::ios::in 模式,这使得程序能够从指定的文件中读取各种类型的数据,如文本、数值等。 ofstream:用于向文件写入数据,继承自 ostream 类。ofstream 的默认打开模式为输出(写入)模式,也就是 std::ios::out 模式。当使用 ofstream 打开一个文件时,如果该文件已存在,其原有内容会被覆盖;若文件不存在,则会创建一个新文件用于写入数据。 fstream:既可以从文件读取数据,也可以向文件写入数据,继承自 iostream 类。fstream 的默认打开模式是 std::ios::in | std::ios::out,这意味着它同时具备输入和输出的功能。但需要注意的是,在默认模式下直接使用 fstream 打开文件进行读写操作时,可能需要根据具体的读写需求进一步调整文件指针的位置等操作,以避免数据读写混乱。

          ifstream 使用 in 模式打开文件时,如果文件不存在,不会报错,但会导致流处于错误状态。可以通过检查流对象的状态来判断文件是否成功打开,例如:

          #include <iostream>
          #include <fstream>
          
          int main() {
              std::ifstream inFile("nonexistent.txt", std::ios::in);
              if (!inFile) {
                  std::cout << "文件打开失败,可能文件不存在。" << std::endl;
                  // 可以在这里进行一些错误处理,比如返回错误码或者执行其他替代操作
              } else {
                  // 执行文件读取操作
                  inFile.close();
              }
              return 0;
          }
          

          在上述代码中,尝试以 in 模式打开一个不存在的文件 nonexistent.txt,通过 !inFile 来判断文件是否成功打开,如果文件不存在,流处于错误状态,程序会输出提示信息。

          • @ 2025-4-17 21:15:39
            #include <iostream>
            #include <fstream>
            
            int main() {
                // 打开一个名为 log.txt 的文件,用于写入日志信息
                std::ofstream log_file("log.txt");
            
                // 保存当前标准输出流 cout 的缓冲区指针
                std::streambuf* org_cout = std::cout.rdbuf();
            
                // 将标准输出流 cout 的缓冲区设置为 log_file 的缓冲区,实现输出重定向
                std::cout.rdbuf(log_file.rdbuf());
            
                // 向重定向后的输出流(即 log_file)输出信息
                std::cout << "Happy Spring!" << std::endl;
            
                // 将标准输出流 cout 的缓冲区恢复为原来保存的缓冲区,恢复正常输出
                std::cout.rdbuf(org_cout);
            
                return 0;
            }
            
            #include <iostream>
            #include <fstream>
            
            int main() {
                std::ofstream log_file("log.txt");
                if (!log_file.is_open()) {
                    std::cerr << "Failed to open log file." << std::endl;
                    return 1;
                }
                std::streambuf* org_cout = std::cout.rdbuf();
                std::cout.rdbuf(log_file.rdbuf());
                std::cout << "Happy Spring!" << std::endl;
                std::cout.rdbuf(org_cout);
                log_file.close();
                return 0;
            }
            
            • @ 2025-4-17 21:13:19
              #include<fstream> // 使用文件输入输出流,对 cin 、 cout 语句适用
              using namespace std;
              int main()
              {
              	ifstream fin("input.txt"); // 定义输入文件名
              	ofstream fout("out.txt"); // 定义输出文件名
              // 从输入文件中读入数据 ,fin>>temp 主要是用于判断数据是否已经读完
              	//while (fin>>temp) sum=sum+temp;
              	//fout<<sum<<endl;
              	int n;
              	fin>>n;
              	int sum = 0;
              	for(int i=1;i<=n;i++){
              		int a;
              		fin>>a;
              		sum += a;
              	}
              	fout<<sum;
              	fin.close();fout.close(); // 关闭文件,
              	return 0;
              }
              

              • @ 2025-4-14 21:45:45

                • @ 2025-4-14 21:45:09
                  #include<iostream>
                  #include<cstdio>
                  using namespace std;
                  int main() {
                  	FILE* fin,*fout;
                  	fin = fopen("input.txt","r");
                  	fout = fopen("output.txt","w");
                  	int t;
                  	int sum = 0;
                  	while(fscanf(fin,"%d",&t) == 1){
                  		sum += t;
                  		fprintf(fout,"%d\n",t);
                  	}
                  	fprintf(fout,"OUTPUT:%d\n",sum);
                  	cout<<endl;
                  	fclose(fin);
                  	fclose(fout);
                  	return 0;
                  }
                  
                  • @ 2025-4-14 21:34:47

                    • @ 2025-4-14 21:33:50

                      • @ 2025-4-14 21:30:52
                        #include<iostream>
                        #include<cstdio>//freopen()
                        using namespace std;
                        int main() {
                        	//FILE* f1 = 
                        	FILE* f1 = freopen("poker.in", "r", stdin);
                        	FILE* f2 = freopen("poker.out", "w", stdout);
                        	/* 中间按原样写代码,什么都不用修改 */
                        	int n;
                        	cin>>n;
                        	int sum = 0;
                        	for(int i = 1;i<=n;i++){
                        		int a;
                        		cin>>a;
                        		sum+=a;
                        	}
                        	cout<<sum<<endl;
                        	fclose(stdin);
                        	fclose(stdout);
                        	return 0;
                        }
                        
                        • @ 2025-4-14 21:15:01

                          在 C++ 里,文件操作属于很基础且重要的内容,它能让程序和外部文件进行交互,实现数据的存储和读取。C++ 提供了一系列的类和函数用于文件操作,这些类和函数主要在 <fstream> 头文件中定义。下面为你详细介绍 C++ 文件操作相关函数。

                          1. 引入必要的头文件和命名空间

                          #include <iostream>
                          #include <fstream>
                          using namespace std;
                          
                          • #include <iostream>:提供标准输入输出流的功能。
                          • #include <fstream>:提供文件流的功能,是进行文件操作的核心头文件。
                          • using namespace std;:使用标准命名空间,避免每次使用标准库中的类和函数时都要加上 std:: 前缀。

                          2. 文件流类

                          <fstream> 头文件中,有三个主要的文件流类:

                          • ifstream:用于从文件读取数据,继承自 istream
                          • ofstream:用于向文件写入数据,继承自 ostream
                          • fstream:既可以从文件读取数据,也可以向文件写入数据,继承自 iostream

                          3. 打开文件

                          打开文件是进行文件操作的第一步,可使用文件流对象的 open 函数,也可以在创建对象时直接指定文件名和打开模式。

                          3.1 使用 open 函数

                          ofstream outFile;
                          outFile.open("example.txt", ios::out);
                          if (!outFile.is_open()) {
                              cout << "无法打开文件!" << endl;
                              return 1;
                          }
                          

                          3.2 在创建对象时指定文件名和打开模式

                          ifstream inFile("example.txt", ios::in);
                          if (!inFile.is_open()) {
                              cout << "无法打开文件!" << endl;
                              return 1;
                          }
                          

                          3.3 打开模式

                          • ios::in:以输入模式打开文件,用于读取数据。
                          • ios::out:以输出模式打开文件,用于写入数据。若文件不存在则创建,若存在则清空原有内容。
                          • ios::app:以追加模式打开文件,新写入的数据会追加到文件末尾。
                          • ios::binary:以二进制模式打开文件,适用于处理二进制数据。
                          • ios::trunc:若文件已存在,打开时会清空原有内容。
                          • ios::ate:打开文件后将文件指针定位到文件末尾。

                          4. 写入文件

                          使用 ofstreamfstream 向文件写入数据,可使用 << 操作符,和向标准输出 cout 写入数据的方式类似。

                          ofstream outFile("example.txt", ios::out);
                          if (outFile.is_open()) {
                              outFile << "Hello, World!" << endl;
                              outFile << "这是一个文件写入示例。" << endl;
                              outFile.close();
                          }
                          

                          5. 读取文件

                          使用 ifstreamfstream 从文件读取数据,有多种读取方式。

                          5.1 使用 >> 操作符逐词读取

                          ifstream inFile("example.txt", ios::in);
                          if (inFile.is_open()) {
                              string word;
                              while (inFile >> word) {
                                  cout << word << endl;
                              }
                              inFile.close();
                          }
                          

                          5.2 使用 getline 函数逐行读取

                          ifstream inFile("example.txt", ios::in);
                          if (inFile.is_open()) {
                              string line;
                              while (getline(inFile, line)) {
                                  cout << line << endl;
                              }
                              inFile.close();
                          }
                          

                          6. 二进制文件读写

                          对于二进制文件的读写,需要使用 ios::binary 打开模式,并使用 readwrite 函数。

                          6.1 二进制文件写入

                          #include <iostream>
                          #include <fstream>
                          using namespace std;
                          
                          int main() {
                              ofstream binaryOutFile("binary_example.bin", ios::out | ios::binary);
                              if (binaryOutFile.is_open()) {
                                  int num = 123;
                                  binaryOutFile.write(reinterpret_cast<const char*>(&num), sizeof(num));
                                  binaryOutFile.close();
                              }
                              return 0;
                          }
                          

                          6.2 二进制文件读取

                          #include <iostream>
                          #include <fstream>
                          using namespace std;
                          
                          int main() {
                              ifstream binaryInFile("binary_example.bin", ios::in | ios::binary);
                              if (binaryInFile.is_open()) {
                                  int num;
                                  binaryInFile.read(reinterpret_cast<char*>(&num), sizeof(num));
                                  cout << "读取的数字是:" << num << endl;
                                  binaryInFile.close();
                              }
                              return 0;
                          }
                          

                          7. 文件定位

                          可以使用 seekg(用于输入流)和 seekp(用于输出流)函数来移动文件指针,使用 tellgtellp 函数来获取文件指针的当前位置。

                          7.1 移动文件指针

                          ifstream inFile("example.txt", ios::in);
                          if (inFile.is_open()) {
                              inFile.seekg(10); // 将文件指针移动到第 10 个字节的位置
                              char ch;
                              inFile.get(ch);
                              cout << "第 10 个字节的字符是:" << ch << endl;
                              inFile.close();
                          }
                          

                          7.2 获取文件指针位置

                          ifstream inFile("example.txt", ios::in);
                          if (inFile.is_open()) {
                              streampos pos = inFile.tellg(); // 获取文件指针的当前位置
                              cout << "文件指针的当前位置是:" << pos << endl;
                              inFile.close();
                          }
                          

                          8. 关闭文件

                          操作完成后,需要使用 close 函数关闭文件,以释放系统资源。

                          ifstream inFile("example.txt", ios::in);
                          if (inFile.is_open()) {
                              // 进行文件读取操作
                              inFile.close();
                          }
                          

                          9. 错误处理

                          在文件操作过程中,可能会出现各种错误,如文件无法打开、读取或写入失败等。可以使用文件流对象的状态标志来检查错误。

                          ifstream inFile("example.txt", ios::in);
                          if (!inFile) {
                              cout << "文件打开失败!" << endl;
                              return 1;
                          }
                          

                          完整示例代码

                          #include <iostream>
                          #include <fstream>
                          #include <string>
                          using namespace std;
                          
                          int main() {
                              // 写入文件
                              ofstream outFile("example.txt", ios::out);
                              if (outFile.is_open()) {
                                  outFile << "Hello, World!" << endl;
                                  outFile << "这是一个文件写入示例。" << endl;
                                  outFile.close();
                              }
                          
                              // 读取文件
                              ifstream inFile("example.txt", ios::in);
                              if (inFile.is_open()) {
                                  string line;
                                  while (getline(inFile, line)) {
                                      cout << line << endl;
                                  }
                                  inFile.close();
                              }
                          
                              return 0;
                          }
                          

                          通过以上内容,你可以掌握 C++ 中基本的文件操作方法,包括文件的打开、读写、定位、关闭以及错误处理等。

                          • @ 2025-4-14 21:13:04

                            • @ 2025-4-14 21:12:50

                              • @ 2025-4-14 21:05:14

                                在C++ 中,对于文本文件,通常没有一个特定的ASCII码值来表示文件的结束。而是通过一些约定或函数来判断文件是否到达末尾。

                                在C++ 中,可以使用 eof() 函数来判断是否到达文件末尾。当读取到文件末尾时,eof() 函数会返回一个非零值(通常为真)。

                                在ASCII码中,有一个字符叫做“文件结束符”(End Of File,EOF),其值通常被定义为 -1(在一些系统中可能有不同的定义)。但它并不是一个真正的字符,而是一个用于表示文件结束的特殊标记。在C++ 中,getchar() 等函数在读取到文件末尾时会返回 EOF

                                对于二进制文件,同样也是通过特定的函数或标志来判断文件结束,而不是依赖某个特定的ASCII码值。因为二进制文件中可能包含各种数据,不能简单地用一个特定的ASCII码来表示文件结束。

                                • @ 2025-4-14 21:03:46

                                  在 C++ 里,文件读写操作是很常用的功能,它能让程序和外部文件进行交互,实现数据的持久化存储和读取。下面将为你详细且通俗易懂地介绍 C++ 文件读写操作。

                                  1. 引入必要的头文件

                                  在 C++ 中进行文件读写操作,需要包含 <fstream> 头文件,它定义了文件流相关的类和操作。同时,为了方便使用标准库中的函数和对象,我们使用 using namespace std;

                                  #include <fstream>
                                  using namespace std;
                                  

                                  2. 文件写入操作

                                  2.1 创建输出文件流对象

                                  要向文件写入数据,需要创建一个 ofstream 类型的对象。ofstream 代表输出文件流,用于将数据写入文件。

                                  ofstream outFile;
                                  

                                  2.2 打开文件

                                  使用 open 方法打开文件,同时指定文件路径和打开模式。打开模式有多种,常用的是 ios::out,表示以输出模式打开文件,如果文件不存在则创建,如果存在则清空原有内容。

                                  outFile.open("example.txt", ios::out);
                                  

                                  2.3 检查文件是否成功打开

                                  在打开文件后,需要检查文件是否成功打开。可以通过 is_open() 方法来判断。

                                  if (!outFile.is_open()) {
                                      cout << "无法打开文件!" << endl;
                                      return 1;
                                  }
                                  

                                  2.4 写入数据

                                  使用 << 操作符向文件写入数据,就像向标准输出 cout 写入数据一样。

                                  outFile << "Hello, World!" << endl;
                                  outFile << "这是一个文件写入示例。" << endl;
                                  

                                  2.5 关闭文件

                                  操作完成后,使用 close() 方法关闭文件,释放系统资源。

                                  outFile.close();
                                  

                                  完整示例代码

                                  #include <iostream>
                                  #include <fstream>
                                  using namespace std;
                                  
                                  int main() {
                                      ofstream outFile;
                                      outFile.open("example.txt", ios::out);
                                  
                                      if (!outFile.is_open()) {
                                          cout << "无法打开文件!" << endl;
                                          return 1;
                                      }
                                  
                                      outFile << "Hello, World!" << endl;
                                      outFile << "这是一个文件写入示例。" << endl;
                                  
                                      outFile.close();
                                      return 0;
                                  }
                                  

                                  3. 文件读取操作

                                  3.1 创建输入文件流对象

                                  要从文件读取数据,需要创建一个 ifstream 类型的对象。ifstream 代表输入文件流,用于从文件中读取数据。

                                  ifstream inFile;
                                  

                                  3.2 打开文件

                                  使用 open 方法打开文件,指定文件路径和打开模式,常用的是 ios::in,表示以输入模式打开文件。

                                  inFile.open("example.txt", ios::in);
                                  

                                  3.3 检查文件是否成功打开

                                  同样,使用 is_open() 方法检查文件是否成功打开。

                                  if (!inFile.is_open()) {
                                      cout << "无法打开文件!" << endl;
                                      return 1;
                                  }
                                  

                                  3.4 读取数据

                                  有多种方式可以从文件读取数据,下面介绍两种常见的方法:

                                  3.4.1 使用 >> 操作符逐词读取
                                  string word;
                                  while (inFile >> word) {
                                      cout << word << endl;
                                  }
                                  
                                  3.4.2 使用 getline() 函数逐行读取
                                  string line;
                                  while (getline(inFile, line)) {
                                      cout << line << endl;
                                  }
                                  

                                  3.5 关闭文件

                                  读取完成后,使用 close() 方法关闭文件。

                                  inFile.close();
                                  

                                  完整示例代码

                                  #include <iostream>
                                  #include <fstream>
                                  #include <string>
                                  using namespace std;
                                  
                                  int main() {
                                      ifstream inFile;
                                      inFile.open("example.txt", ios::in);
                                  
                                      if (!inFile.is_open()) {
                                          cout << "无法打开文件!" << endl;
                                          return 1;
                                      }
                                  
                                      string line;
                                      while (getline(inFile, line)) {
                                          cout << line << endl;
                                      }
                                  
                                      inFile.close();
                                      return 0;
                                  }
                                  

                                  4. 二进制文件读写

                                  4.1 二进制文件写入

                                  在打开文件时,需要指定 ios::binary 模式。使用 write() 方法写入二进制数据。

                                  #include <iostream>
                                  #include <fstream>
                                  using namespace std;
                                  
                                  int main() {
                                      ofstream binaryOutFile("binary_example.bin", ios::out | ios::binary);
                                      if (!binaryOutFile.is_open()) {
                                          cout << "无法打开文件!" << endl;
                                          return 1;
                                      }
                                  
                                      int num = 123;
                                      binaryOutFile.write(reinterpret_cast<const char*>(&num), sizeof(num));
                                  
                                      binaryOutFile.close();
                                      return 0;
                                  }
                                  

                                  4.2 二进制文件读取

                                  同样,在打开文件时指定 ios::binary 模式。使用 read() 方法读取二进制数据。

                                  #include <iostream>
                                  #include <fstream>
                                  using namespace std;
                                  
                                  int main() {
                                      ifstream binaryInFile("binary_example.bin", ios::in | ios::binary);
                                      if (!binaryInFile.is_open()) {
                                          cout << "无法打开文件!" << endl;
                                          return 1;
                                      }
                                  
                                      int num;
                                      binaryInFile.read(reinterpret_cast<char*>(&num), sizeof(num));
                                  
                                      cout << "读取的数字是:" << num << endl;
                                  
                                      binaryInFile.close();
                                      return 0;
                                  }
                                  

                                  5. 文件打开模式总结

                                  • ios::out:以输出模式打开文件,用于写入数据。
                                  • ios::in:以输入模式打开文件,用于读取数据。
                                  • ios::binary:以二进制模式打开文件。
                                  • ios::app:以追加模式打开文件,新写入的数据会追加到文件末尾。
                                  • ios::trunc:如果文件已存在,打开时会清空原有内容。

                                  通过上述步骤和示例代码,你可以掌握 C++ 中基本的文件读写操作,无论是文本文件还是二进制文件都能进行有效的读写。

                                  • @ 2025-4-14 21:02:23
                                    #include<iostream>
                                    #include<cstdio>//freopen()
                                    using namespace std;
                                    int main() {
                                    	freopen("input.txt", "r", stdin);
                                    	freopen("output.txt", "w", stdout);
                                    	/* 中间按原样写代码,什么都不用修改 */
                                    	int a,b;
                                    	cin>>a>>b;
                                    	cout<<a+b;
                                    	cout<<endl;
                                    	fclose(stdin);
                                    	fclose(stdout);
                                    	return 0;
                                    }
                                    
                                    • @ 2025-4-14 21:02:11

                                      • @ 2025-4-14 21:01:07

                                        • @ 2025-4-14 20:55:41

                                          • 1