c++文件读写

文件类型分为两种
特点文本文件二进制文件
数据表示以可读文本形式存储,使用字符编码表示以二进制形式存储,没有字符编码
可读性人类可读通常不是人类可读,包含未经编码的二进制数据
数据处理用于文本处理,执行搜索、替换、分割、解析等文本操作需要专门的处理方式,需要了解文件的格式和数据结构
文件格式以明文格式存储,字符可见,通常以文本编码的头部信息开始可以采用各种格式,通常没有文件开头的字符编码信息
操作文件的三大类
文件流类描述主要用途
ifstream输入文件流,用于从文件中读取数据。读取文件中的数据,通常用于文本文件。
ofstream输出文件流,用于向文件中写入数据。写入数据到文件中,通常用于文本文件。
fstream文件流,同时具有输入和输出功能,可读可写。既能读取文件中的数据,又能写入数据到文件中。
ifstream 输入文件流
ifstream(const char* filename, ios_base::openmode mode = ios_base::in);

功能

  1. 文件读取ifstream 主要用于从文件中读取数据。你可以使用 >> 运算符或 getline 函数来读取文件的内容。
  2. 文件打开:使用 ifstream 对象打开目标文件。它接受文件名作为参数,并尝试打开该文件以进行读取操作。
  3. 错误处理ifstream 提供了错误处理机制,你可以检查是否发生了读取错误,以采取适当的措施。

主要构造函数参数

ifstream 的主要构造函数参数是文件名和文件打开模式:

  • filename:要读取的文件的名称,以 C 字符串形式表示。可以是相对路径或绝对路径。
  • mode:文件打开模式用于指定文件的操作方式。下面是一些常见的文件打开模式选项:
    • ios_base::in:输入模式,用于读取文件。
    • ios_base::binary:二进制模式,用于处理二进制文件。在二进制模式下,不会执行文本格式转换。
    • 其他模式:还有其他一些模式选项,如 ios_base::ate(初始位置在文件末尾)等。

示例

ifstream 类提供了多种方式来读取文件中的数据,具体取决于你要读取的数据类型和文件内容的格式。以下是几种常见的方式:

  1. 逐行读取文本文件

    使用 getline 函数逐行读取文本文件的内容。

    ifstream inputFile("example.txt");
    string line;
    
    while (getline(inputFile, line)) {
        // 处理每一行的内容
    }
    
  2. 逐个字符读取文本文件

    使用 get 函数逐个字符读取文本文件的内容。

    ifstream inputFile("example.txt");
    char ch;
    
    while (inputFile.get(ch)) {
        // 处理每个字符
    }
    
  3. 使用 >> 运算符读取单词或数字

    使用 >> 运算符可以从文本文件中逐个单词或数字。

    ifstream inputFile("numbers.txt");
    int number;
    
    while (inputFile >> number) {
        // 处理每个数字
    }
    
  4. 二进制文件的读取

    如果要读取二进制文件,通常使用 read 函数来读取二进制数据。

    ifstream binaryFile("data.bin", ios::binary);
    char buffer[100];
    
    binaryFile.read(buffer, sizeof(buffer));
    
  5. 按特定格式解析文件内容

    如果文件包含自定义格式的数据,你可以使用字符串处理函数和其他方法按特定格式解析文件内容。

    ifstream inputFile("data.txt");
    string data;
    
    while (getline(inputFile, data)) {
        // 根据特定格式解析 data
    }
    

无论你选择哪种方式,都应根据文件的内容和格式来选择最适合的方法。 ifstream 提供了多种方法来读取不同类型和格式的文件内容。

ofstream 输出文件流
ofstream(const char* filename, ios_base::openmode mode = ios_base::out);

功能

文件写入ofstream 主要用于将数据写入文件。你可以使用 << 运算符将文本、数字、变量等写入文件。

  1. 文件创建:如果指定的文件不存在,ofstream 将自动创建文件。如果文件已存在,将会被覆盖(默认行为),或者你可以选择追加模式以在文件末尾添加数据。
  2. 文本文件和二进制文件ofstream 可以用于创建和写入文本文件和二进制文件。通过选择不同的打开模式,你可以指定是文本模式还是二进制模式。
  3. 错误处理ofstream 提供了错误处理机制,你可以检查是否发生了写入错误,以采取适当的措施。

主要构造函数参数

ofstream 的主要构造函数参数是文件名和文件打开模式:

  • filename:要写入的文件的名称,以 C 字符串形式表示。可以是相对路径或绝对路径。
  • mode:文件打开模式用于指定文件的操作方式。下面是一些常见的文件打开模式选项:
    • ios_base::out:输出模式,用于写入文件。如果文件不存在,将会创建它。如果文件已存在,将会被覆盖。
    • ios_base::app:追加模式,用于在文件末尾添加数据,而不是覆盖文件。
    • ios_base::binary:二进制模式,用于处理二进制文件。在二进制模式下,不会执行文本格式转换。
    • 其他模式:还有其他一些模式选项,如 ios_base::trunc(截断模式,用于清空文件内容),ios_base::ate(初始位置在文件末尾)等。

示例

使用 ofstream 类可以以多种方式写文件,具体取决于你要写入的数据类型和文件内容的格式。以下是几种常见的方式:

  1. 逐行写入文本文件

    使用 << 运算符将文本数据逐行写入文本文件。

    ofstream outputFile("output.txt");
    
    if (outputFile.is_open()) {
        outputFile << "这是要写入文件的文本数据。\n";
        outputFile << "更多文本数据。\n";
        outputFile.close(); // 关闭文件
    }
    
  2. 逐个字符写入文本文件

    使用 put 函数逐个字符写入文本文件。

    ofstream outputFile("output.txt");
    
    if (outputFile.is_open()) {
        char ch = 'A';
        outputFile.put(ch);
        outputFile.put('B');
        outputFile.close(); // 关闭文件
    }
    
  3. 使用 << 运算符写入文本数据

    可以使用 << 运算符写入各种数据类型,如整数、浮点数、字符串等。

    ofstream outputFile("numbers.txt");
    
    if (outputFile.is_open()) {
        int number = 42;
        double pi = 3.14159;
        string text = "Hello, World!";
        outputFile << "整数: " << number << ", 浮点数: " << pi << ", 字符串: " << text << endl;
        outputFile.close(); // 关闭文件
    }
    
  4. 二进制文件的写入

    如果要写入二进制文件,使用 write 函数以二进制方式写入数据。

    ofstream binaryFile("data.bin", ios::binary);
    char buffer[] = "Binary Data";
    
    binaryFile.write(buffer, sizeof(buffer));
    binaryFile.close(); // 关闭文件
    
  5. 以特定格式写入文件内容

    如果需要按特定格式将数据写入文件,可以使用字符串处理函数和流操作符 << 来构建适当格式的文本。

    ofstream outputFile("data.txt");
    
    if (outputFile.is_open()) {
        int id = 123;
        string name = "Alice";
        int age = 25;
        outputFile << id << " " << name << " " << age << endl;
        // 更多数据写入操作
        outputFile.close(); // 关闭文件
    }
    

这些是 ofstream 写文件的一些常见方式。你可以根据文件的内容和格式选择最适合的方法来执行文件写入操作。

fstream 文件流
fstream(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out);

功能

  1. 文件读取和写入fstream 可以用于从文件中读取数据,同时也可以将数据写入文件。这使得它在需要同时读取和写入文件内容的情况下非常有用。
  2. 文件打开:使用 fstream 对象打开目标文件。它接受文件名作为参数,并尝试打开该文件以进行读取和写入操作。
  3. 错误处理fstream 提供了错误处理机制,你可以检查是否发生了读取或写入错误,以采取适当的措施。

主要构造函数参数

fstream 的主要构造函数参数是文件名和文件打开模式:

  • filename:要读取和写入的文件的名称,以 C 字符串形式表示。可以是相对路径或绝对路径。
  • mode:文件打开模式用于指定文件的操作方式。下面是一些常见的文件打开模式选项:
    • ios_base::in:输入模式,用于读取文件。
    • ios_base::out:输出模式,用于写入文件。如果文件不存在,将会创建它。如果文件已存在,将会被覆盖。
    • ios_base::app:追加模式,用于在文件末尾添加数据,而不是覆盖文件。
    • ios_base::binary:二进制模式,用于处理二进制文件。在二进制模式下,不会执行文本格式转换。
    • 其他模式:还有其他一些模式选项,如 ios_base::ate(初始位置在文件末尾)等。

示例

fstream 是C++标准库中的文件流类,允许你执行文件的读取和写入操作。它具有同时支持输入和输出的功能,因此可以用于读写文件。以下是 fstream 的一些常见用法示例:

  1. 创建文件并写入数据

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main() {
        fstream file("output.txt", ios_base::out);
    
        if (file.is_open()) {
            file << "这是要写入文件的文本数据。\n";
            file << "更多文本数据。\n";
            file.close(); // 关闭文件
            cout << "文件写入完成。\n";
        } else {
            cerr << "无法打开文件。\n";
        }
    
        return 0;
    }
    

    在此示例中,我们使用 fstream 创建文件 “output.txt” 并写入文本数据。

  2. 读取文件内容并处理

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main() {
        fstream file("data.txt", ios_base::in);
    
        if (file.is_open()) {
            int number;
            while (file >> number) {
                cout << "从文件中读取的数据: " << number << endl;
            }
            file.close(); // 关闭文件
        } else {
            cerr << "无法打开文件。\n";
        }
    
        return 0;
    }
    

    这个示例中,我们使用 fstream 打开文件 “data.txt” 并从中读取整数数据。

  3. 同时读取和写入文件

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main() {
        fstream file("data.txt", ios_base::in | ios_base::out);
    
        if (file.is_open()) {
            int number;
            file >> number;
            cout << "从文件中读取的数据: " << number << endl;
    
            // 在文件末尾添加新数据
            int newNumber = number * 2;
            file.seekp(0, ios::end); // 定位到文件末尾
            file << newNumber;
    
            file.close(); // 关闭文件
        } else {
            cerr << "无法打开文件。\n";
        }
    
        return 0;
    }
    

    这个示例演示了如何使用 fstream 同时读取和写入文件内容。

  4. 使用二进制文件

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    struct Data {
        int number;
        double value;
    };
    
    int main() {
        fstream binaryFile("data.bin", ios_base::in | ios_base::out | ios_base::binary);
    
        if (binaryFile.is_open()) {
            Data data;
            // 从二进制文件中读取数据
            binaryFile.read(reinterpret_cast<char*>(&data), sizeof(Data));
            cout << "从二进制文件中读取的数据: " << data.number << ", " << data.value << endl;
    
            // 写入新数据到二进制文件
            data.number = 42;
            data.value = 3.14159;
            binaryFile.seekp(0, ios::beg); // 定位到文件开头
            binaryFile.write(reinterpret_cast<const char*>(&data), sizeof(Data));
    
            binaryFile.close(); // 关闭文件
        } else {
            cerr << "无法打开二进制文件。\n";
        }
    
        return 0;
    }
    

    这个示例演示了如何使用 fstream 读写二进制文件中的数据。

fstream 提供了灵活的方式来操作文件,无论是读取还是写入,以及文本文件或二进制文件。根据需要,你可以选择不同的打开模式,以满足特定的文件操作需求。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值