首页 > 编程语言 >【33】C++文件流相关内容

【33】C++文件流相关内容

时间:2024-10-28 14:51:18浏览次数:8  
标签:文件 33 seekg 位置 C++ include open infile

目录

文件流的状态检查

文件流的定位

seekg

tellg

seekp

常见错误总结


文件流的状态检查

s.is_open( )

文件流是否打开成功, 

s.eof( )  流s是否结束

s.fail( )

流s的failbit或者badbit被置位时, 返回true

failbit: 出现非致命错误,可挽回, 一般是软件错误

badbit置位, 出现致命错误, 一般是硬件错误或系统底层错误, 不可挽回

s.bad( )

流s的badbit置位时, 返回true

s.good( )

流s处于有效状态时, 返回true

s.clear( )

流s的所有状态都被复位

文件流的定位

seekg

seekg( off_type offset,      //偏移量

        ios::seekdir origin );  //起始位置

作用:设置输入流的位置

参数1: 偏移量

参数2: 相对位置

  beg   相对于开始位置

  cur   相对于当前位置

  end 相对于结束位置

读取当前程序的最后50个字符

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(void) {
	ifstream infile;

	infile.open("定位.cpp");
	if (!infile.is_open()) {
		return 1;
	}

	infile.seekg(-50, infile.end);
	while (!infile.eof()) {
		string line;
		getline(infile, line);
		cout << line << endl;
	}

	infile.close();

	system("pause");
	return 0;
}

tellg

返回该输入流的当前位置(距离文件的起始位置的偏移量)

获取当前文件的长度

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(void) {
	ifstream infile;

	infile.open("定位.cpp");
	if (!infile.is_open()) {
		return 1;
	}

	// 先把文件指针移动到文件尾
	infile.seekg(0, infile.end);

	int len = infile.tellg();
	cout << "len:" << len;

	infile.close();
	system("pause");
	return 0;
}

seekp

设置该输出流的位置

先向新文件写入:“123456789”

然后再在第4个字符位置写入“ABC”

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(void) {
	ofstream outfile;

	outfile.open("test.txt");
	if (!outfile.is_open()) {
		return 1;
	}

	outfile << "123456789";

	outfile.seekp(4, outfile.beg);
	outfile << "ABC";

	outfile.close();
	system("pause");
	return 0;
}

常见错误总结

1.文件没有关闭

文件没有关闭, close(),可能导致写文件失败

2.文件打开方式不合适

3.在VS2015的部分版本中,当sscanf和sscanf_s的格式字符串中含有中文时,可能会读取失败。

在vs2019中未发现该类问题。

标签:文件,33,seekg,位置,C++,include,open,infile
From: https://blog.csdn.net/m0_57667919/article/details/143231710

相关文章

  • 【30】C++子类相关
    子类型关系什么是子类型公有继承时,派生类的对象可以作为基类的对象处理,派生类是基类的子类型。 #include<iostream>usingnamespacestd;classA{public: A(){} ~A(){} voidkill(){cout<<"Akill."<<endl;}};classB:publicA{public: B(){}......
  • vue(vue.js)—组件(1)非单文件组件
    原文连接:vue(vue.js)—组件(1)非单文件组件–每天进步一点点现在流行的前端框架都支持组件化开发,什么是组件呢?试想一个场景,你开发了一个系统,系统中有一个修改密码的功能,点击后弹出一个小窗口,然后修改密码。系统中一共有5个页面需要用到这个功能,按照以前的做法是把写完的代码复......
  • vue—组件(2)单文件组件
    原文链接:vue—组件(2)单文件组件–每天进步一点点上一篇文章介绍了vuejs中非单文件组件,这篇文章介绍一下单文件组件。单文件组件需要用到vue脚手架,可以参考前面的文章:vue3.0(1)—项目搭建–每天进步一点点(longkui.site)1.默认组件我们通过脚手架创建了一个vue项目。其......
  • 做大模型备案的企业看过来,详解大模型备案重难点【评估测试题+备案源文件】
            通过对大模型备案所涉及的测试题、安全评估报告以及其他相关材料的深入分析,本文详细探讨了大模型备案过程中的关键点和难点问题。我们不仅审视了备案流程中的各个环节,还对可能遇到的挑战进行了全面的讨论,以确保大模型的安全性和合规性。文章目录(一)适用主体(......
  • C++之OpenCV入门到提高001:使用 Visual Studio2022 配置 OpenCV 环境
    一、介绍从今天开始,我们又要开始一个新的系列了,这个系列就是《C++之Opencv入门到提高》。这个系列是有关如何使用C++语言,通过Opencv来实现图像处理、缺陷检测、视频处理、机器学习等功能。OpenCV我也是新接触的,一步一步的学习,一步一步提高。这个系列是以C++为基......
  • 如何从类路径中获取资源文件路径
    在Java应用程序开发中,经常需要从类路径中加载资源文件,如配置文件、模板文件等。本文将详细介绍如何使用类加载器(ClassLoader)从类路径中获取资源文件的路径,并将其转换为字符串形式。具体步骤如下:代码示例Stringfile=this.getClass().getClassLoader().getResource("emp.xml......
  • 网页版本的文件共享工具
    创作灵感:   现在大家都使用手机了,个人云主机一些共享文件需要电脑才能下载这很麻烦,而且还需要通过SFTP工具才可以。   考虑到非技术人员从未使用SFTP工具,所以开发了一个网页版本的文件上传下载工具。只需要在服务器部署这个程序,就可以打开访问、下载、上传。 ......
  • Web渗透文件上传有哪些漏洞
    Web渗透文件上传有以下漏洞:一、绕过文件类型检查漏洞;二、文件名解析漏洞;三、目录穿越漏洞;四、二进制文件漏洞;五、文件上传时的身份验证和授权问题;等等。绕过文件类型检查漏洞会导致应用程序将恶意文件误认为合法文件,从而允许攻击者执行恶意操作。一、绕过文件类型检查漏洞文......
  • webpack打包js代码(ES6->ES5)和vue文件
    为什么需要babel?Babel命令行使用Babel插件的使用Babel的预设presetbabel-loaderbabel-preset编写App.vue代码App.vue的打包过程@vue/compiler-sfcresolve模块解析确实文件还是文件夹extensions和alias配置......
  • 如何减小VS2022 MAUI生成的apk文件大小?
    在解决方案目录树中双击解决方案,打开对应的文档(也就是解决方案名称.csproj文件)的编辑界面在<PropertyGroup>节点内添加以下内容:<!--缩小发布的.apk文件大小--><AndroidLinkTool>r8</AndroidLinkTool><AndroidEnableResourceShrinking>true</AndroidEnableResourceShrinking><An......