C++写文件全面指南

一、文件的基础操作

文件是一种存储数据的容器,通常用于长期保存程序的重要数据。C++标准库提供了一组简单而易用的函数来实现文件的读写操作。文件操作主要包括打开文件、读取文件、写入文件和关闭文件4个步骤。

1.文件打开

在进行文件读写操作前,必须先打开文件。C++标准库提供了fstream头文件,其中的fstream类就具有打开文件的功能。打开文件的方式有两类:二进制模式和文本模式(默认为文本模式),可以通过打开方式的第二个参数来指定。

#include <fstream>
using namespace std;

int main()
{
    fstream file; // 声明一个fstream对象
    file.open("test.txt", ios::in | ios::out | ios::trunc); 
    // 打开文件test.txt,若文件不存在则创建新文件,同时可读写文件
    if (!file) // 判断文件是否打开成功
    {
        cout << "open failed." << endl;
        return 0;
    }
    return 0;
}

2.文件读取

文件读取有两种方法:字符读取和行读取。其中,字符读取使用get函数,行读取使用getline函数。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    ifstream file("test.txt"); // 打开文件test.txt
    string line;
    while (getline(file, line)) // 按行读取文件
    {
        cout << line << endl;
    }
    char ch;
    while (file.get(ch)) // 按字符读取文件
    {
        cout << ch;
    }
    file.close(); // 关闭文件
    return 0;
}

3.文件写入

文件写入使用put函数和write函数。put函数用于像文件中写入一个字符,write函数将一段数据写入到文件中。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ofstream file("test.txt");
    file.put('A'); // 向文件写入字符A
    char str[] = "Hello World!";
    file.write(str, sizeof(str)); // 向文件写入字符串Hello World!
    file.close();
    return 0;
}

4.文件关闭

文件关闭使用close函数,调用close函数后,文件被释放并从内存中删除。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ofstream file("test.txt");
    file << "Hello World!";
    file.close(); // 关闭文件
    return 0;
}

二、文件的其他操作

除了基本的读写操作外,C++标准库还提供了一些文件的其他操作,包括文件长度、文件指针位置、文件复制、文件重命名等。

1.文件长度

获取文件长度使用tellg函数和seekg函数,tellg函数返回当前文件读指针的位置,seekg函数用于设置文件读指针的位置。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream file("test.txt");
    file.seekg(0, ios::end); // 将读指针设置到文件末尾
    int length = file.tellg(); // 获取文件长度
    cout << length << endl;
    file.close();
    return 0;
}

2.文件指针位置

获取文件指针位置使用tellp函数和seekp函数,同样是用来操作文件读写指针的。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ofstream file("test.txt");
    file << "Hello World!";
    file.seekp(0, ios::beg); // 将写指针设置到文件开始位置
    file << "h"; // 写入新的字符
    file.close();
    return 0;
}

3.文件复制

文件复制使用fstream和streambuf两个类,其中fstream用来打开复制的文件,streambuf用来读取原文件并写入新文件。

#include <iostream>
#include <fstream>
#include <streambuf>
using namespace std;

int main()
{
    fstream file1("test1.txt", ios::in | ios::binary);
    fstream file2("test2.txt", ios::out | ios::binary);
    file2 << file1.rdbuf(); // 将file1的读取缓冲区写入file2
    file1.close();
    file2.close();
    return 0;
}

4.文件重命名

文件重命名使用rename函数,可以将一个文件重命名为另一个文件名。

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    rename("test1.txt", "test2.txt"); // 将test1.txt重命名为test2.txt
    return 0;
}

三、代码示例

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    // 文件打开
    fstream file("test.txt", ios::in | ios::out | ios::trunc);
    if (!file)
    {
        cout << "open failed." << endl;
        return 0;
    }

    // 文件读取
    string line;
    while (getline(file, line))
    {
        cout << line << endl;
    }
    char ch;
    while (file.get(ch))
    {
        cout << ch;
    }

    // 文件写入
    file.put('A');
    char str[] = "Hello World!";
    file.write(str, sizeof(str));

    // 文件长度
    file.seekg(0, ios::end);
    int length = file.tellg();
    cout << length << endl;

    // 文件指针位置
    file.seekp(0, ios::beg);
    file << "h";

    // 文件复制
    fstream file1("test1.txt", ios::in | ios::binary);
    fstream file2("test2.txt", ios::out | ios::binary);
    file2 << file1.rdbuf();
    file1.close();
    file2.close();

    // 文件重命名
    rename("test1.txt", "test2.txt");

    // 文件关闭
    file.close();
    return 0;
}

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
QUYHAQUYHA
上一篇 2025-04-22 01:14
下一篇 2025-04-22 01:14

相关推荐

  • 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
  • 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
  • Python程序文件的拓展

    Python是一门功能丰富、易于学习、可读性高的编程语言。Python程序文件通常以.py为文件拓展名,被广泛应用于各种领域,包括Web开发、机器学习、科学计算等。为了更好地发挥P…

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

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

    编程 2025-04-29

发表回复

登录后才能评论