我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++实现将内容写入文件的方法总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++实现将内容写入文件的方法总结

一、C语言输出内容到文件

使用 C 的文件 I/O 函数,例如 fopen(),fprintf(),fputs() 和 fwrite() 等。这些函数由 C 语言中的标准库 stdio.h 提供。

#include <stdio.h>
 
int main()
{
    // 以写入模式打开文件
    FILE *fp = fopen("myfile.txt", "w");
 
    if (fp == NULL)
    {
        // 打开文件失败
        printf("Error opening file!\n");
        return 1;
    }
 
    // 使用 fprintf() 写入字符串
    fprintf(fp, "Hello, world!\n");
 
    // 使用 fputs() 写入字符串
    fputs("This is another string.\n", fp);
 
    // 使用 fwrite() 写入二进制数据
    int num = 42;
    fwrite(&num, sizeof(int), 1, fp);
 
    // 关闭文件
    fclose(fp);
 
    return 0;
}

在这个代码示例中,我们首先使用 fopen() 函数以写入模式打开了一个文件,然后使用 fprintf(),fputs() 和 fwrite() 向文件写入了字符串和二进制数据,最后使用 fclose() 函数关闭了文件。请注意,在使用 fwrite() 函数写入二进制数据时,我们需要提供要写入的数据的指针,以及每个数据单元的大小和要写入的数据单元数。

二、C++文件输入/输出流

此种是C++标准的输入输出,一般不会带来字符种类不同引发的问题,比如宽字节和窄字节之间的区别,肯能我们打开文件内容都一样,但是涉及加密、编码等操作宽窄字符是有区别的,这个是有教训的,牢记。

下面是使用 C++ 中的文件输入/输出流的代码示例:

#include <fstream>
#include <iostream>
 
int main()
{
    // 以写入模式打开文件
    std::ofstream out("myfile.txt");
 
    if (!out)
    {
        // 打开文件失败
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }
 
    // 使用流操作符 << 写入字符串
    out << "Hello, world!" << std::endl;
    out << "This is another string." << std::endl;
 
    // 使用 write() 写入二进制数据
    int num = 42;
    out.write(reinterpret_cast<char*>(&num), sizeof(int));
 
    // 关闭文件
    out.close();
 
    // 以读取模式打开文件
    std::ifstream in("myfile.txt");
 
    if (!in)
    {
        // 打开文件失败
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }
 
    // 使用流操作符 >> 读取字符串
    std::string s;
    in >> s;
    std::cout << s << std::endl;
 
    // 使用 read() 读取二进制数据
    in.read(reinterpret_cast<char*>(&num), sizeof(int));
    std::cout << num << std::endl;
 
    // 关闭文件
    in.close();
 
    return 0;
}

在这个代码示例中,我们首先使用 ofstream 对象以写入模式打开了一个文件,然后使用流操作符 << 向文件写入了字符串,使用 write() 写入了二进制数据,最后使用 close() 关闭了文件。然后,我们使用 ifstream 对象以读取模式打开了同一个文件,使用流操作符 >> 读取了字符串,使用 read()读取了二进制数据,最后使用 close() 关闭了文件。

请注意,当使用 write() 写入二进制数据时,我们需要将要写入的数据的指针转换为 char* 类型,并提供每个数据单元的大小和要写入的数据单元数。当使用 read() 读取二进制数据时,我们也需要将要读取的数据的指针转换为 char* 类型,并提供每个数据单元的大小和要读取的数据单元数。

另一个 C++ 标准库中的文件输入/输出流类型叫做 filebuf,它可以通过标准输入/输出流来读写文件。例如,下面是使用 filebuf 的代码示例:

#include <fstream>
#include <iostream>
 
int main()
{
    // 以写入模式打开文件
    std::filebuf fb;
    fb.open("myfile.txt", std::ios::out);
 
    if (!fb.is_open())
    {
        // 打开文件失败
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }
 
    // 将文件缓冲区关联到标准输出流
    std::ostream out(&fb);
 
    // 使用标准输出流写入字符串
    out << "Hello, world!" << std::endl;
    out << "This is another string." << std::endl;
 
    // 使用 sputn() 写入二进制数据
    int num = 42;
    fb.sputn(reinterpret_cast<char*>(&num), sizeof(int));
 
    // 关闭文件
    fb.close();
 
    // 以读取模式打开文件
    fb.open("myfile.txt", std::ios::in);
    if (!fb.is_open())
    {
    // 打开文件失败
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }
 
    // 将文件缓冲区关联到标准输入流
    std::istream in(&fb);
 
    // 使用标准输入流读取字符串
    std::string s;
    in >> s;
    std::cout << s << std::endl;
 
    // 使用 sgetn() 读取二进制数据
    fb.sgetn(reinterpret_cast<char*>(&num), sizeof(int));
    std::cout << num << std::endl;
 
// 关闭文件
    fb.close();
 
    return 0;
}

在这个代码示例中,我们首先使用 filebuf 对象以写入模式打开了一个文件,然后将文件缓冲区关联到标准输出流,使用标准输出流写入字符串,使用 sputn() 写入了二进制数据,最后使用 close() 关闭了文件。然后,我们使用 filebuf 对象以读取模式打开了同一个文件,将文件缓冲区关联到标准输入流,使用标准输入流读取字符串,使用 sgetn() 读取了二进制数据,最后使用 close() 关闭了文件。 请注意,当使用 sputn() 写入二进制数据时,我们需要将要写入的数据的指针转换为 char* 类型,并提供每个数据单元的大小和要写入的数据单元数。当使用 sgetn() 读取二进制数据时,我们也需要将要读取的数据的指针转换为 char* 类型,并提供每个数据单元的大小和要读取的数据单元数。希望这些代码示例能帮助您理解 C++ 中的文件输入/输出流的使用方法。

三、文件输入/输出流迭代器

你是不是曾经有这样的烦恼,想将数组或者一堆类型一样的数据写入文件,for循环太麻烦。其实,要想简单有个前提,就是你的数据支持迭代器,例如vector这种类型,C++内部对其实现了迭代功能(iterator),那么将数据一个一个写入非常方便。

在使用文件输入/输出流迭代器之前,你需要先包含下面的头文件:

#include <fstream>
#include <iterator>

然后,你可以使用下面的代码来写入数据到文件,这段代码会将 data 中的数据写入到文件 "output.txt" 中,并在每个数据之间添加一个空格:

std::ofstream out_file("output.txt");
std::ostream_iterator<int> out_iter(out_file, " ");
 
std::vector<int> data = {1, 2, 3, 4, 5};
std::copy(data.begin(), data.end(), out_iter);
 
out_file.close();

读取文件中的数据也很简单,可以使用下面的代码,这段代码会从文件 "input.txt" 中读取数据,并将数据存储在 vector 中。文件输入/输出流迭代器很方便,因为它们可以像使用普通迭代器一样使用,可以很容易地编写模板代码。

四、C++ 中的文件输入/输出流缓冲区

首先,你需要包含下面的头文件:

#include <fstream>
#include <iostream>

接下来,你可以使用下面的代码来写入数据到文件:

std::ofstream out_file("output.txt");
std::streambuf* buf = out_file.rdbuf();
 
int data = 123;
buf->sputn((char*)&data, sizeof(int));
 
out_file.close();

上面这段代码会将数据 123 写入到文件 "output.txt" 中。

读取文件中的数据也很简单,可以使用下面的代码:

std::ifstream in_file("input.txt");
std::streambuf* buf = in_file.rdbuf();
 
int data;
buf->sgetn((char*)&data, sizeof(int));
 
in_file.close();

上面这段代码会从文件 "input.txt" 中读取一个整数,并将它存储在变量 data 中。

使用文件输入/输出流缓冲区可以直接操纵底层文件描述符,这使得你可以实现更底层的文件操作。但是,这也意味着你需要自己处理底层细节,比如字节序转换等等小问题。

五、C++ 中的文件输入/输出流预定义的操纵符

头文件:

#include <fstream>
#include <iostream>

接下来,你可以使用下面的代码来写入数据到文件,这段代码会将数据 123 写入到文件 "output.txt" 中,并在末尾添加一个换行符。

std::ofstream out_file("output.txt");
 
int data = 123;
out_file << data << std::endl;
 
out_file.close();

你也可以使用 std::flush 操纵符来立即刷新文件输出缓冲区,例如:

std::ofstream out_file("output.txt");
 
int data = 123;
out_file << data << std::flush;
 
out_file.close();

这段代码会将数据 123 写入到文件 "output.txt" 中,并立即刷新文件输出缓冲区。

这种方法实在喜欢不起来,搞不懂他在干什么,有大神来给我解答一下吧。

六、windows api

windows api写和读之前的博客有写过,先CreateFile然后ReadFile、WriteFile。这个会带来宽字符问题,具体原因尚不清楚,慎用。贴个链接吧。

C++文件相关函数CreateFile|ReadFile|WriteFile用法详解

以上就是C++实现将内容写入文件的方法总结的详细内容,更多关于C++将内容写入文件的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++实现将内容写入文件的方法总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++实现将内容写入文件的方法总结

本文主要总结了一下C/C++将内容写入文件的方法,C的方法有些单调,毕竟没有库函数。C++则丰富些,下面我把搜集到的整理一下,供大家参考
2023-05-18

Python实现将内容写入文件的五种方法总结

本篇带你详细看一下python将内容写入文件的方法以及细节,主要包括write()方法、writelines() 方法、print() 函数、使用 csv 模块、使用 json 模块,需要的可以参考一下
2023-05-17

Android 读取文件内容实现方法总结

Android 读取文件内容实现方法,这里整理了几种方法,大家需要可以看下。 如果要打开存放在/data/data//files目录应用私有的文件,可以使用Activity提供openFileInput()方法。
2022-06-06

C#获取XML文件内容的多种方式总结

这篇文章主要介绍了C#获取XML文件内容的多种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

php写入文件内容的方法有哪些

在PHP中,可以使用以下方法来写入文件内容:1. 使用`file_put_contents()`函数:该函数将一个字符串写入文件中。如果文件不存在,则创建新文件。如果文件已存在,则覆盖文件内容。示例代码如下:```php$file = 'e
2023-08-11

Java实现文件上传的方法总结

这篇文章主要为大家介绍了三种Java实现文件上传的方法,文中的示例代码讲解详细,对我们的学习或工作有一定的借鉴价值,感兴趣的可以了解一下
2023-05-15

Java实现将类数据逐行写入CSV文件的方法详解

这篇文章主要为大家详细介绍了Java如何实现将类数据逐行写入CSV文件,文中的示例代码讲解详细,具有一定的参考价值,需要的可以借鉴一下
2022-11-13

Python实现HTTP协议下的文件下载方法总结

本文介绍了几种常用的python下载文件的方法,具体使用到了htttplib2,urllib等包,希望对大家有帮忙。 1.简单文件下载 使用htttplib2,具体代码如下:h = httplib2.Http() url = '
2022-06-04

linux查找大文件指定内容的实现方法

以大划小思想,然后重定向。 linux有时候会遇到文件很大,关键字查找都要超过整屏,无法查看到所有内容。比如一个非常大的日志文件info.log,我们要查看某段字符所有日志,可以同 cat info
2022-06-04

python实现搜索本地文件信息写入文件的方法

本文实例讲述了python实现搜索本地文件信息写入文件的方法。分享给大家供大家参考,具体如下: 主要功能: 在指定的盘符,如D盘,搜索出与用户给定后缀名(如:jpg,png)相关的文件,然后把搜索出来的信息(相关文件的绝对路径),存放到用户
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录