C++中的文件输入/输出(6):一些有用的函数

C++ 一个函数调用其他.cpp文件中的函数 使用VC或VS创建C++项目的时候,会自动产生许多文件夹,其中有一个文件夹->源文件: 在该文件下可以自定义许多.cpp文件,但是需要注意的是这里面的各个文件只能有一个文件中含有main()函数, 而且各个文件中不能使用相同的函数名进行定义; 那么要那么多文件放在项目中有什么用呢? 当然这里C++是提供一个文件调用其他文件中函数的功能的, 这就可以让我们自定义一个只包含main()... 阅读详情
tellg() ——返回一个 int型数值,它表示“内置指针”的当前位置。此函数仅当你在读取一个文件时有效。例如:
    #include <fstream.h>
     
    void main()
    {
       
// 假如我们已经在 test_file.txt 中存有了“ Hello ”的内容
   
    ifstream File("test_file.txt");
     
        char arr[10];
     
        File.read(arr,10);
       
       
// 由于 Hello 占 5 个字符,因此这里将返回 5
   
    cout << File.tellg() << endl;
     
        File.close();
    }
   
   
tellp() —— 与 tellg()有同样的功能,但它用于写文件时。总而言之:当我们读取一个文件,并要知道内置指针的当前位置时,应该使用 tellg();当我们写入一个文件,并要知道内置指针的当前位置时,应该使用 tellp(). 由于此函数的用法与 tellg()完全一样,我就不给出示例代码了。
   
    seekp() —— 还记得 seekg()么?当我在读取一个文件,并想到达文件中某个特定位置时,就曾使用过它。 seekp()亦如此,只不过它用于写入一个文件的时候。例如,假如我在进行文件读写,而要定位到当前位置的三个字符之前,则需调用 FileHandle.seekg(-3). 但如果我是在写入一个文件,并且比如我要重写后5个字符的内容,我就必须往回跳转5个字符,因而,我应该使用 FileHandle.seekp(-5) .
   
    ignore() —— 使用于读取文件之时。如果你想略过一定数量的字符,只需使用此函数。实际上,你也可以使用 seekg()来代替,然而使用 ignore()有一个优点——你可以指定一个特定“界限规则(delimiter rule)”,同样使得 ignore()在指定的位置停下。函数原型如下:
   
    istream& ignore( int nCount, delimiter );
   
   
nCount表示要略过的字符数量,而 delimiter —— 与它的名称有着同样的含义:假如你想在文件末尾停下,则可使用EOF值传入,这样一来此函数就等同于 seekg();但该参数还可以使用其他值,例如 ‘/n’这样可以在换行的同时定位在新行处。下面是示例:
    #include <fstream.h>
     
    void main()
    {
       
// 假设 test_file.txt 中已经存有 "Hello World" 这一内容
   
    ifstream File("test_file.txt");
     
        static char arr[10];
     
       
// 假如一直没有遇到字符 "l" ,则向前定位直到跳过 6 个字符
   
    // 而如果期间遇到 "l" ,则停止向前,定位在该处
   
    File.ignore(6,'l');
     
        File.read(arr,10);
     
        cout << arr << endl;
// 它将显示 "lo World!"
     
   
    File.close();
     
    }
   

    getline() —— 虽然前面的章节中我曾提到过这个函数,但还有一些内容我们未曾涉及:此函数不但可用于逐行读取,而且它还可以设为遇到某个特定字符后停止读取。下面给出传递这一参数的方法:
   
    getline(array,array_size,delim);
   
   
以下为示例代码:
   
    #include <fstream.h>
     
    void main()
    {
       
// 假设 test_file.txt 中已经存有 "Hello World" 这一内容
   
    ifstream File("test_file.txt");
     
        static char arr[10];
     
       
/* 读取,直到满足下面的条件之一:
    1
)已经读取 10 个字符
    2
)遇到字母 "o"
    3
)出现新一行
   
    */
        File.getline(arr,10,'o');
     
        cout << arr << endl;
// 将显示 "Hell"
   
    File.close();
    }
   

    peek() —— 此函数将返回输入流文件的下一个字符,但它不移动内置指针。我想你该记得,像 get()这样的函数也返回输入流文件的下一个字符,而与此同时它将移动内置指针。所以当你再次调用 get()函数的时候,它会返回再下一个字符,而非前面那个。哦,使用 peek()也会返回字符,但它不会移动“光标”。所以,假如你连续两次调用 peek()函数,它会返回同一个字符。考虑以下代码:
   
    #include <fstream.h>
     
    void main()
    {
       
// 假设 test_file.txt 中已经存有 "Hello World" 这一内容
   
    ifstream File("test_file.txt");
     
        char ch;
     
        File.get(ch);
        cout << ch << endl;
// 将显示 "H"
     
        cout <<    char(File.peek()) << endl;
// 将显示 "e"
        cout <<    char(File.peek()) << endl;
// 将再次显示 "e"
     
        File.get(ch);
        cout << ch << endl;
// 还是显示 "e"
   

    File.close();
       
    }
   

    顺便说一下,我忘了讲—— peek()函数实质上返回的是字符的ASCII码,而非字符本身。因此,假如你想看到字符本身,你得像我在示例中做的那样进行调用 (译注:即要转为 char 类型)。
   
    _unlink() —— 删除一个文件。假如你要使用此函数,需要在你的程序中包含 io.h头文件。下面是示例代码:
   
    #include <fstream.h>
    #include <io.h>
     
    void main()
    {
        ofstream File;
     
        File.open("delete_test.txt");
// 创建一个文件
   
    File.close();
     
        _unlink("delete_test.txt");
// 删除这个文件
   
 
       
// 试图打开此文件,但假如它已不存在
   
    // 函数将返回一个 ios::failbit 错误值
   
    File.open("delete_test.txt",ios::nocreate);
     
       
// 验证它是否返回该值
   
    if(File.rdstate() == ios::failbit)
            cout << "Error...!/n";
// 耶,成功了
   
   
File.close();
     
    }
   

    putback() —— 此函数将返回最后一个所读取字符,同时将内置指针移动-1个字符。换言之,如果你使用 get()来读取一个字符后再使用 putback(),它将为你返回同一个字符,然而同时会将内置指针移动-1个字符,所以你再次使用 get()时,它还是会为你返回同样的字符。下面是示例代码:
   
    #include <fstream.h>
     
    void main()
    {
       
// test_file.txt 应包含内容 "Hello World"
   
    ifstream File("test_file.txt");
       
        char ch;
     
        File.get(ch);
     
        cout << ch << endl;
// 将显示 "H"
     
        File.putback(ch);
        cout << ch << endl;
// 仍将显示 "H"
       
        File.get(ch);
        cout << ch << endl;
// 再一次显示 "H"
     
        File.close();
    }
   
   
flush() —— 在处理输出流文件的时候,你所存入的数据实际上并非立刻写入文件,而是先放入一个缓冲区中,直到该缓冲区放满数据之后,这些数据才被存入真正的文件中(在你的磁盘上)。旋即缓冲区会被清空,再重新进行下一轮写入。
    但假如你想在缓冲区写满之前就将其中的数据写入磁盘,则使用 flush()函数。只须像这样进行调用: FileHandle.flush(),这样缓冲区内的数据将会写入实际的物理文件,而后缓冲区被清空。
    再补充一点(高阶的)内容: flush()函数会调用与相应流缓冲( streambuf)相联系的 sync()函数(出自MSDN)。
   
    结语
   

    嗯,我希望你现在可以实现你的文件输入/输出程序了。我已经将自己所知的内容都涉及到,我想它们比你所需要的还要多。即使如此,还是会有一些内容我没有提及的……不过我想你或许都不会使用到那些方面的内容。因此,如果你还需要了解更多关于某些特定主题的高阶的理论,可以在互联网上搜索,例如,可以尝试一下 google.com,但你可别来问我!我不对任何询问我关于如何实现某个程序此类问题的邮件作答复。
 
C++中 调用其他文件中的函数 C++中从其他多个文件中调用多个函数 阅读详情

相关推荐

C++输入输出文件流

一、C++输入输出 I/O 库头文件 下列的头文件在 C++ 编程中很重要。 标准输出流(cout) 预定义的对象 cout 是 iostream 类的一个实例。cout 对象“连接”到标准输出设备,通常是显示屏。cout 是与流插入运算符 << 结合使用的。 标准输入流(cin) 预定义的对象 cin 是 iostream 类的一个实例。cin 对象附属到标准输入设 备,通常是键盘...

流楚丶格念的博客 7904

C++:IO流

讲解C++的IO流

博客网站 https://async-area.com 1218

F5 GTM DNS 实战指南:智能DNS的监控与健康检查机制

本文深入解析F5 BIG-IP GTM智能DNS的核心机制,重点阐述其监控与探针两大功能如何协同工作。监控器负责深度检查服务器应用健康,确保服务可用性;探针则实时测量网络路径质量,实现基于延迟的智能流量调度。文章通过实战配置步骤,指导如何构建逻辑架构、建立iQuery通信、配置业务级健康检查及探针,从而构建高可用、高性能的全局负载均衡解决方案。

weixin_29240711的博客 472

iostat命令详解

iostat iostat用于输出CPU和磁盘I/O相关的统计信息.  命令格式: iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [ ... ] | ALL ] [ -p [ device |

Zhangjay的专栏 12万+

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3195

Workbench中直接调用ICEM CFD进行网格划分

自从ANSYS 12.0之后,ICEM CFD就从Workbench中被分离出去,作为一个独立的程序使用了。取而代之的是Meshing模块。 在Meshing的属性节点菜单中右键点击Mesh,选择Insert > Method,插入方法。 选择需要划分网格的几何体,点击apply。此时Geometry显示为1 Body。 设置Method为MultiZone,如果不设置成这个的话,找不到进入ICEM CFD的入口。如果要划分四面体,可以在Mapped Mesh Type中选择其他类型。

Yan的博客 6513

Linux iostate命令实战

前言: iostat(I/O statistics)工具,对系统的磁盘操作活动进行监控。 类似于vmstat,它只能对系统整体情况进行分析,无法对特定进程进行分析。 1.iostat基本输出 iostat命令默认输出结果如下: root@7bc18553126f:/tmp# iostat Linux 5.10.76-linuxkit (7bc18553126f) 03/27/22 _aarch64_ (4 CPU) avg-cpu: %user %nice %system %io

恐龙弟旺仔的博客 3443

LangFuse部署与实践

LangFuse的原理主要是基于可观察性和分析技术来监控和优化低延迟消息(LLM)应用。它提供了一套完整的解决方案,通过收集、处理和分析LLM应用在运行过程中产生的各种数据,来生成实时的、深入的、可操作的见解。通过提供实时的、深入的见解和可视化的跟踪功能,LangFuse使得识别和解决应用性能问题变得更加简单和高效。总的来说,LangFuse的原理是通过综合运用可观察性和分析技术,来提供对LLM应用的全面监控和优化能力。这使得开发者和运维团队能够更加高效地管理和维护他们的应用,从而提升用户体验和业务效益。

pumpkin84514的博客 7948

iostat 命令详解

iostat主要用于监控系统设备的IO负载情况,根据这个可以看出当前系统的写入量和读取量,CPU负载和磁盘负载。

m369880395的博客 2万+

深信服桌面云实战:从零部署到高效运维的关键配置指南

本文提供了一份深信服桌面云从零部署到高效运维的实战指南。内容涵盖项目启动阶段的资源、网络与存储规划,详细演示了VMP与VDC平台的安装与对接,并深入讲解了制作虚拟机模板、配置用户体系、优化终端策略等核心步骤。最后,分享了包括CPU公平分配、智能调度在内的关键性能调优与高阶运维技巧,旨在帮助管理员构建稳定、高效的云桌面环境。

blockchain9miner的博客 452

别再买错磁铁了!手把手教你为TLE5012B/AS5047等磁编码器选配和安装径向充磁磁铁

本文详细解析了为TLE5012B/AS5047等磁编码器选配和安装径向充磁磁铁的关键要点。从充磁方向的物理本质到供应商沟通技巧,再到安装工艺的黄金法则,帮助工程师避免常见错误,确保磁编码器稳定工作。特别强调了径向充磁的重要性及验证方法,并提供了尺寸选择、温度特性和抗干扰设计的实用建议。

weixin_26750481的博客 317

❥关于C++之流状态(stream state)

cin或cout对象包含一个描述流状态(stream state)的数据成员(从ios_base类那里继承的)。流状态(被定义为iostate类型,而iostate是一种bitmask类型)由3个ios_base元素组成:eofbit、badbit或failbit,其中每个元素都是一位,可以是1(设置)或0(清除)。当cin操作到达文件末尾时,它将设置eofbit;当cin操作未能读取到预期的字符时,它将设置failbit。I/O失败(如试图读取不可访问的文件或试图写入写保护的磁盘),也可能将failbit

itzyjr的专栏 5095

SAP UI5 主题设置全解析:从启动参数到运行时切换、跨域白名单与事件监听

SAP UI5主题体系深度解析:从配置到切换的完整指南 摘要:SAP UI5主题机制远不止CSS换肤,其工程化实践涵盖启动配置、运行时API切换、跨库路径映射及安全管控等关键环节。通过bootstrap标签或URL参数设置初始主题,运行时可用Theming.setTheme无刷新切换。自定义主题需配置theme-roots路径,跨域加载需声明sap-allowed-theme-origins白名单。主题切换完成后会触发applied事件,适合执行视觉同步操作。该体系支持多品牌适配、集中式主题管理,在Fior

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 328

C++中的文件输入/输出(6):一些有用的函数

 C++中的文件输入/输出(6):一些有用的函数原作:Ilia Yordanov,  loobian@cpp-home.com        tellg() ——返回一个int型数值,它表示“内置指针”的当前位置。此函数仅当你在读取一个文件时有效。例如:    #include          void main()    {        // 假如我们已经在test_file.txt

邝圣凯 5715

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341)

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341) Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成,在GPL2.0及更新协议下发布。Drupal在某些情况下,通过文件模块或者子系统上传恶意文件触发XSS漏洞。

qq_51577576的博客 2209

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++中的文件输入/输出

非常详细的一篇关于C++中的文件输入/输出的文章,适合看自己需要的部分,或者当作查询资料;不必要看懂所有细节

weixin_58045467的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【C++篇】C++的输入和输出

知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的错误,同时方便本人的基础复习,也希望能帮助到大家最好的好人,都是犯过错误的过来人;一个人往往因为有一点小小的缺点,将来会变得更好。如有错漏之处,敬请指正,有更好的方法,也希望不吝提出。最好的生活方式就是和努力的大家,一起奔跑在路上。

陈七的博客,学习知识分享,期待与大家的交流 3万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++基础之C++中的输入输出

目录 文章目录 前言 一、输入输出流 二、c++中输入输出语句 1.标准输入设备 2.标准输出设备 3.原理 三、iostream类库

weixin_48716357的博客 5万+

C++之文件输入输出

1.文件输入: 1.文件模式: 2.文件输出: 1.流状态: 在c++中我们易知的是cout和cin俩个标准输入输出,而在真实的状况中。我们则是需要对文件的内容进行读取和重新写入,这样我们只有cin和cout这俩个标准输入和输出就明显的不够满足条件了。所以有一个fstream类中的ifstream和ofstream则解决了这个对文件操作的问题。 1.文件输入: 我们相比较...

q496958148的博客 2万+

C++中的文件输入/输出(3):掌握输入/输出流

C++中的文件输入/输出(3)原作:Ilia Yordanov,  loobian@cpp-home.com 掌握输入/输出流 在这一章里,我会提及一些有用的函数。我将为你演示如何打开一个可以同时进行读、写操作的文件;此外,我还将为你介绍其它打开文件的方法,以及如何判断打开操作是否成功。因此,请接着往下读!到目前为止,我已为你所展示的只是单一的打开文件的途径:要么为读取

邝圣凯 9233

C++系列五:输入/输出

C++有强大的输入/输出(I/O)功能,它允许程序与用户交互,从文件读取数据并将结果写入文件,本文详细介绍C++的基本输入/输出概念以及如何在程序中使用。

聚集机器学习、信息安全 2449
上一篇: 最新 C++的iostream标准库介绍(1)
下一篇: 一个有关fstream类的bug
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值