C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > c++读取写入文件内容

c++如何读取文件中的内容和往文件中写入数据

作者:躯坏神辉

C++文件流是用于进行文件读写操作的工具,它提供了一种能够简单、高效地与外部文件进行交互的方式,这篇文章主要介绍了c++如何读取文件中的内容和往文件中写入数据,文中通过代码介绍的非常详细,需要的朋友可以参考下

在 C++ 中,读取和写入文件主要通过 <fstream> 头文件提供的类来实现。以下是详细的方法和示例:

1. 包含必要的头文件

#include <fstream>  // 文件流操作
#include <string>   // 使用字符串
#include <iostream> // 输入输出

2. 写入文件

使用 ofstream (输出文件流)

#include <fstream>
#include <iostream>

int main() {
    // 创建输出文件流对象
    std::ofstream outFile;
    
    // 打开文件(如果文件不存在会自动创建)
    outFile.open("example.txt");
    
    // 检查文件是否成功打开
    if (!outFile.is_open()) {
        std::cout << "无法打开文件!" << std::endl;
        return 1;
    }
    
    // 写入数据
    outFile << "Hello, World!" << std::endl;
    outFile << "这是第二行" << std::endl;
    outFile << 123 << " " << 45.67 << std::endl;
    
    // 关闭文件
    outFile.close();
    
    std::cout << "数据写入成功!" << std::endl;
    return 0;
}

简化的写入方式

#include <fstream>

int main() {
    // 使用构造函数直接打开文件
    std::ofstream outFile("example.txt");
    
    if (outFile) {  // 检查文件是否成功打开
        outFile << "简化方式写入数据" << std::endl;
        outFile << "自动会在析构时关闭文件" << std::endl;
    }
    
    return 0;
}

3. 读取文件

使用 ifstream (输入文件流)

#include <fstream>
#include <iostream>
#include <string>

int main() {
    // 创建输入文件流对象
    std::ifstream inFile;
    inFile.open("example.txt");
    
    if (!inFile.is_open()) {
        std::cout << "无法打开文件!" << std::endl;
        return 1;
    }
    
    std::string line;
    
    // 逐行读取文件内容
    while (std::getline(inFile, line)) {
        std::cout << line << std::endl;
    }
    
    inFile.close();
    return 0;
}

其他读取方式

#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::ifstream inFile("example.txt");
    
    if (inFile) {
        // 方式1:逐词读取
        std::string word;
        while (inFile >> word) {
            std::cout << "单词: " << word << std::endl;
        }
        
        // 清空文件状态并重新定位到开头
        inFile.clear();
        inFile.seekg(0);
        
        // 方式2:读取单个字符
        char ch;
        while (inFile.get(ch)) {
            std::cout << ch;
        }
    }
    
    return 0;
}

4. 同时读写文件

使用 fstream

#include <fstream>
#include <iostream>

int main() {
    // 打开文件用于读写
    std::fstream file("data.txt", std::ios::in | std::ios::out | std::ios::app);
    
    if (file.is_open()) {
        // 写入数据
        file << "新数据" << std::endl;
        
        // 移动到文件开头
        file.seekg(0);
        
        // 读取数据
        std::string content;
        while (std::getline(file, content)) {
            std::cout << content << std::endl;
        }
        
        file.close();
    }
    
    return 0;
}

5. 二进制文件操作

#include <fstream>
#include <iostream>

struct Data {
    int id;
    double value;
    char name[20];
};

int main() {
    // 写入二进制数据
    Data data = {1, 3.14, "Test"};
    
    std::ofstream outFile("binary.dat", std::ios::binary);
    if (outFile) {
        outFile.write(reinterpret_cast<char*>(&data), sizeof(Data));
        outFile.close();
    }
    
    // 读取二进制数据
    Data readData;
    std::ifstream inFile("binary.dat", std::ios::binary);
    if (inFile) {
        inFile.read(reinterpret_cast<char*>(&readData), sizeof(Data));
        std::cout << "ID: " << readData.id 
                  << ", Value: " << readData.value 
                  << ", Name: " << readData.name << std::endl;
        inFile.close();
    }
    
    return 0;
}

6. 文件打开模式

模式标志描述
std::ios::in打开用于读取
std::ios::out打开用于写入
std::ios::app追加模式(在文件末尾写入)
std::ios::ate打开后定位到文件末尾
std::ios::trunc如果文件存在,先截断
std::ios::binary二进制模式

重要提示

  1. 总是检查文件是否成功打开
  2. 记得关闭文件(虽然析构函数会自动关闭,但显式关闭是好习惯)
  3. 处理可能的异常(文件不存在、权限问题等)
  4. 使用合适的打开模式
  5. 二进制文件操作时要注意数据对齐和字节顺序

这些是 C++ 中文件操作的基本方法,根据具体需求选择合适的方式。

附:错误处理

#include <iostream>  
#include <fstream>  
#include <string>  
  
int main() {  
    std::ofstream outfile("nonexistent_directory/file.txt");  
    if (!outfile.is_open()) {  
        std::cerr << "无法打开文件" << std::endl;  
        return 1;  
    }  
  
    // 尝试写入数据  
    outfile << "This is a test." << std::endl;  
  
    // 检查写入是否成功  
    if (outfile.fail()) {  
        std::cerr << "写入文件时发生错误" << std::endl;  
        outfile.clear(); // 清除错误标志  
    }  
  
    outfile.close();  
  
    return 0;  
}

错误处理在文件操作中非常重要。你可以使用fail()bad(), 和 eof() 成员函数来检查流的状态,或者使用is_open()来检查文件是否成功打开

到此这篇关于c++如何读取文件中的内容和往文件中写入数据的文章就介绍到这了,更多相关c++读取写入文件内容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文