C++文件读写操作实现指南

一、文件流

C++中文件流分为输入流和输出流,分别对应读和写的操作。文件流操作需要用到头文件,其定义了三种基本类型:ifstream(输入流)、ofstream(输出流)和fstream(输入输出流)。与流相关的定义还有open()和close()成员函数,open()函数用于打开文件,而close()函数用于关闭文件。下面的示例代码演示了如何使用文件流实现文件的打开、读取、写入和关闭操作:

#include 
using namespace std;

int main()
{
    char buffer[256];

    // 打开文件
    ifstream fin("input.txt");
    ofstream fout("output.txt");

    // 读取文件内容
    while(fin.getline(buffer, 256))
    {
        // 输出内容到控制台
        cout << buffer << endl;
        // 输出内容到文件
        fout << buffer << endl;
    }

    // 关闭文件
    fin.close();
    fout.close();

    return 0;
}

在上面的示例代码中,首先使用ifstream和ofstream定义了两个文件流对象,然后用open()函数分别打开了一个名为input.txt和output.txt的文件。接着使用getline()函数逐行从input.txt中读取内容,并在控制台输出这些内容,并将其写入到output.txt中。最后用close()函数关闭了两个文件流对象。

二、文件读取

在C++中可以使用ifstream或者fstream打开文件进行读取操作。当使用ifstream打开文件时,只能进行读取操作,而无法进行写入操作。以下示例代码演示了如何使用ifstream进行文件读取:

#include 
using namespace std;

int main()
{
    char buffer[256];
    ifstream fin("input.txt");

    // 判断文件是否打开成功
    if(!fin.is_open())
    {
        cout << "文件打开失败!" << endl;
        return 1;
    }

    // 读取文件内容
    while(fin.getline(buffer, 256))
    {
        // 输出内容到控制台
        cout << buffer << endl;
    }

    fin.close();
    return 0;
}

在上述示例代码中,首先使用ifstream定义了一个输入文件流对象fin,并用open()函数打开一个名为input.txt的文件。然后使用getline()函数逐行读取文件内容,并输出到控制台。最后使用close()函数关闭了文件流对象。

三、文件写入

在C++中,可以使用ofstream或者fstream打开文件进行写入操作。当使用ofstream打开文件时,只能进行写入操作,而无法进行读取操作。以下示例代码演示了如何使用ofstream进行文件写入:

#include 
using namespace std;

int main()
{
    char buffer[] = "欢迎来到知乎";
    ofstream fout("output.txt");

    // 判断文件是否打开成功
    if(!fout.is_open())
    {
        cout << "文件打开失败!" << endl;
        return 1;
    }

    // 写入文件内容
    fout << buffer << endl;

    fout.close();
    return 0;
}

在上述示例代码中,首先使用ofstream定义了一个输出文件流对象fout,并用open()函数打开一个名为output.txt的文件。然后使用<<运算符将内容写入文件中。而在输入输出流fstream中,同样可以用<<运算符进行文件内容的读取与写入。

四、二进制文件读写

除了常规的文本文件读写,C++还支持二进制文件的读写。在进行二进制文件读写时,需要使用以下函数之一: read()和write()函数。read()函数从文件中读取指定的字节数,并将其存储在指定的缓冲区中。而write()函数将指定的字节数从缓冲区写入到文件中。以下示例代码演示了如何进行二进制文件的读写:

#include 
#include 
using namespace std;

int main () 
{
    char data[100];

    // 打开文件
    ofstream fout("file.bin", ios::out | ios::binary); 
    fout.write("Welcome to Zhihu", 17); 

    // 关闭文件
    fout.close();

    // 以二进制格式打开文件
    ifstream fin("file.bin", ios::in | ios::binary); 

    // 读取文件内容
    fin.read(data, 17); 

    // 输出内容到控制台
    cout << data << endl; 

    // 关闭文件
    fin.close();

    return 0;
}

在上述示例代码中,首先使用ofstream定义了一个输出文件流对象fout,并用open()函数打开一个名为file.bin的文件,打开方式为ios::out | ios::binary,其中ios::out表示以输出方式打开文件,ios::binary表示以二进制方式打开文件。然后使用write()函数写入17个字符到文件中。

接着,用ifstream定义了一个输入文件流对象fin,并用open()函数打开名为file.bin的文件,打开方式为ios::in | ios::binary,其中ios::in表示以输入方式打开文件,ios::binary表示以二进制方式打开文件。然后使用read()函数从文件中读取17个字节的内容,并存储在data缓冲区中。

五、文件位置指针及文件截取

C++中可以使用seekg()函数和seekp()函数控制文件位置指针的位置。get指针指向被读取的下一个字节,而put指针指向将要被写入的下一个字节。另外,还可以用标准库函数函数tellg()和tellp()来实现获取文件位置指针的位置。以下示例代码演示了如何使用seekp()函数截取文件:

#include 
#include 
using namespace std;

int main () 
{
    // 打开文件
    ofstream fout("file.txt"); 

    // 写入文件内容
    fout << "Welcome to Zhihu" << endl; 

    // 获取当前文件指针位置
    streampos pos = fout.tellp(); 

    // 移动文件指针到第14个字节处
    fout.seekp(pos-14); 

    // 截取文件
    fout.truncate(pos - 14); 

    // 关闭文件
    fout.close();

    return 0;
}

在上述示例代码中,首先使用ofstream定义了一个输出文件流对象fout,并用open()函数打开一个名为file.txt的文件。然后使用<<运算符将内容写入文件中。接着,调用tellp()函数获取当前写指针位置,将其存储于pos变量中。然后使用seekp()函数将写指针位置移动到第14个字节前(即最后一个字母“u”处),最后使用truncate()函数截取文件,将文件大小截取至pos – 14个字节。在文件操作结束后,使用close()函数关闭文件流对象。

六、结论

通过本文的讲解,我们可以了解到C++中文件操作的基本原理及常见的文件读写操作。无论是文本文件还是二进制文件,都可以使用不同的文件流进行读写操作。除了常规的读写操作之外,C++还提供了文件位置指针及文件截取的操作,使得文件操作更加灵活方便。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/257169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-15 12:44
下一篇 2024-12-15 12:44

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • 运维Python和GO应用实践指南

    本文将从多个角度详细阐述运维Python和GO的实际应用,包括监控、管理、自动化、部署、持续集成等方面。 一、监控 运维中的监控是保证系统稳定性的重要手段。Python和GO都有强…

    编程 2025-04-29
  • Python应用程序的全面指南

    Python是一种功能强大而简单易学的编程语言,适用于多种应用场景。本篇文章将从多个方面介绍Python如何应用于开发应用程序。 一、Web应用程序 目前,基于Python的Web…

    编程 2025-04-29
  • Python wordcloud入门指南

    如何在Python中使用wordcloud库生成文字云? 一、安装和导入wordcloud库 在使用wordcloud前,需要保证库已经安装并导入: !pip install wo…

    编程 2025-04-29
  • Python栈操作用法介绍

    如果你是一位Python开发工程师,那么你必须掌握Python中的栈操作。在Python中,栈是一个容器,提供后进先出(LIFO)的原则。这篇文章将通过多个方面详细地阐述Pytho…

    编程 2025-04-29
  • vue下载无后缀名的文件被加上后缀.txt,有后缀名的文件下载正常问题的解决

    本文旨在解决vue下载无后缀名的文件被加上后缀.txt,有后缀名的文件下载正常的问题,提供完整的代码示例供参考。 一、分析问题 首先,需了解vue中下载文件的情况。一般情况下,我们…

    编程 2025-04-29
  • Python字符转列表指南

    Python是一个极为流行的脚本语言,在数据处理、数据分析、人工智能等领域广泛应用。在很多场景下需要将字符串转换为列表,以便于操作和处理,本篇文章将从多个方面对Python字符转列…

    编程 2025-04-29
  • Python小波分解入门指南

    本文将介绍Python小波分解的概念、基本原理和实现方法,帮助初学者掌握相关技能。 一、小波变换概述 小波分解是一种广泛应用于数字信号处理和图像处理的方法,可以将信号分解成多个具有…

    编程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • 为什么用cmd运行Java时需要在文件内打开cmd为中心

    在Java开发中,我们经常会使用cmd在命令行窗口运行程序。然而,有时候我们会发现,在运行Java程序时,需要在文件内打开cmd为中心,这让很多开发者感到疑惑,那么,为什么会出现这…

    编程 2025-04-29

发表回复

登录后才能评论