vs中没有vc_vs中的控件

vs中没有vc_vs中的控件#include头文件fstream包含了ifstream、ofstream、fstream三个类,可以通过定义这三个类的对象来实现相对应的文件操作。#includeofstream//文件写操作,内存写入存储设备ifstream//文件读操作,存储设备读取到内存中fstream//读写操作,对打开的文件可进行读写操作1.打开文件函数open()public…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

#include

头文件fstream包含了ifstream、ofstream、fstream三个类,可以通过定义这三个类的对象来实现相对应的文件操作。

#include

ofstream //文件写操作,内存写入存储设备

ifstream //文件读操作,存储设备读取到内存中

fstream //读写操作,对打开的文件可进行读写操作

1.打开文件

函数 open()

public member function

void open ( const char * filename,

ios_base::openmode mode = ios_base::in | ios_base::out );

void open(const wchar_t *_Filename,

ios_base::openmode mode= ios_base::in | ios_base::out,

int prot = ios_base::_Openprot);

参数

filename

mode

prot

含义

操作文件名

打开文件方式

打开文件属性(应用少)

打开文件的方式在ios类(所有流式I/O的基类)中定义,有如下几种方式:

ios::in

为输入(读)而打开文件

ios::out

为输出(写)而打开文件

ios::ate

初始位置:文件尾

ios::app

所有输出附加在文件末尾

ios::trunc

如果文件已存在先删除文件

ios::binary

二进制方式

打开文件的方式可以单一使用或者利用“|”组合使用,例如:

ofstream outfile;

outfile.open(“Hello.txt”,ios::in|ios::out|ios::binary)

打开文件的属性在ios类中也有定义:

0

普通文件,打开文件

1

只读文件

2

隐含文件

3

系统文件

对于文件的属性也可以利用“|”和“+”进行组合使用

如果只是使用默认的打开方式可以不用显式的调用open()函数,直接使用流对象进行文件的操作,如:

ofstream out(“\\\”,ios::out);

ifstream in(“\\\”,ios::in);

fstream fil(“\\\”,ios::in|ios::out);

当使用默认的方式对文件进行打开时,可以使用成员函数is_open()对文件进行是否已打开的验证。

2.关闭文件

函数close()

对文件进行完读写操作之后,必须将文件关闭使得文件重新变成可以访问的。close()函数负责将缓存中的数据排放出来并关闭文件。关闭的只是流对象所打开的文件,仍然可以利用流对象去打开别的文件。

3.文本文件的读写

文本文件的读写可以如同类与控制台交互一样利用”<>”分别进行写和读,如:

#include

int main()

{

ofstream file(“out.txt”);

if(file.is_open())

{

file<

file.close();

}

} //文件的写操作

#include

#include

using namespace std;

int main()

{

char buff[256];

ifstream infile(“in.txt”);

if(!infile.is_open())

cout<

while(!infile.eof())

{

infile.getline(buff,100);

cout<

}

return 0;

} //文本的读入,并打印在屏幕上

状态标志符的验证

有一些验证流的状态的成员函数(所有都返回bool型返回值):

bad()

如果在读写过程中出错,返回true.

fail()

除了与bad()同样的情况下返回true外,加上格式错误时也返回true,例如当想要读入一个整数 ,而得到一个字母。

eof()

如果读文件到达文件的末尾,返回true。

good()

最通用的验证:如果遇上以上任何一个函数返回true的话,此函数返回false。

clear()

重置以上成员函数所检查的状态标志,没有参数。

获得和设置流指针

所有输入/输出流对象都有至少一个流指针:

ifstream,类似istream,有一个被称为get pointer的指针,指向下一个将被读取的元素。

ofsream,类似ostream,有一个被称为put pointer的指针,指向下一个元素的位置。

fstream,类似iostream,同时继承了 get 和 put 。

可以使用以下成员函数来读取或配置流指针:

tellg()和tellp()

这两个函数不用传入参数,返回pos_type类型的值,即一个整数,代表当前get流指针的位置(用tellg)或put流指针的位置(用tellp)。

seekg()和seekp()

这对函数分别用来改变指针get和put的位置。两个函数都被重载为两种不同的原型:

seekg(pos_type position);

seekp(pos_type position);

使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。要求传入的参数类型与函数 tellg 和tellp 的返回值类型相同。

seekg ( off_type offset, seekdir direction );

seekp ( off_type offset, seekdir direction );

使用这个原型可以指定由参数direction决定的一个具体的指针开始计算的一个位移(offset)。它可以是:

ios::beg

从流开始位置计算的位移

ios::cur

从流指针当前位置开始计算的位移

ios::end

从流末尾处开始计算的位移

流指针 get 和 put 的值对文本文件(text file)和二进制文件(binary file)的计算方法都是不同的,因为文本模式的文件中某些特殊字符可能被修改。由于这个原因,建议对以文本文件模式打开的文件总是使用seekg 和 seekp的第一种原型,而且不要对tellg 或 tellp 的返回值进行修改。对二进制文件,你可以任意使用这些函数,应该不会有任何意外的行为产生。

// obtaining file size

#include

#include

const char * filename = “test.txt”;

int main () {

long l,m;

ifstream in(filename, ios::in|ios::binary);

l = in.tellg();

in.seekg (0, ios::end);

m = in.tellg();

in.close();

cout << “size of ” << filename;

cout << ” is ” << (m-l) << ” bytes.\n”;

return 0;

} //`获取二进制文件的大小

4.二进制文件

在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。

文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read。第一个函数 (write) 是ostream 的一个成员函数,都是被ofstream所继承。而read 是istream 的一个成员函数,被ifstream 所继承。类 fstream 的对象同时拥有这两个函数。它们的原型是:

write ( char * buffer, streamsize size );

read ( char * buffer, streamsize size );

这里 buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。

// reading binary file

#include

#include

const char * filename = “test.txt”;

int main () {

char * buffer;

long size;

ifstream in (filename, ios::in|ios::binary|ios::ate);

size = in.tellg();

in.seekg (0, ios::beg);

buffer = new char [size];

in.read (buffer, size);

in.close();

cout << “the complete file is in a buffer”;

delete[] buffer;

return 0;

}

//运行结果:

The complete file is in a buffer

5.缓存与同步

当我们对文件流进行操作的时候,它们与一个streambuf 类型的缓存(buffer)联系在一起。这个缓存(buffer)实际是一块内存空间,作为流(stream)和物理文件的媒介。例如,对于一个输出流, 每次成员函数put (写一个单个字符)被调用,这个字符不是直接被写入该输出流所对应的物理文件中的,而是首先被插入到该流的缓存(buffer)中。

当缓存被排放出来(flush)时,它里面的所有数据或者被写入物理媒质中(如果是一个输出流的话),或者简单的被抹掉(如果是一个输入流的话)。这个过程称为同步(synchronization),它会在以下任一情况下发生:

当文件被关闭时: 在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。

当缓存buffer 满时:缓存Buffers 有一定的空间限制。当缓存满时,它会被自动同步。

控制符明确指明:当遇到流中某些特定的控制符时,同步会发生。这些控制符包括:flush 和endl。

明确调用函数sync(): 调用成员函数sync() (无参数)可以引发立即同步。这个函数返回一个int 值,等于-1 表示流没有联系的缓存或操作失败。

参考

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192613.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vuex中mapGetters「建议收藏」

    vuex中mapGetters「建议收藏」vuex为了更快捷解决组件之间相互传值问题不划分模块结构目录index.js:importVuefrom’vue’importVuexfrom’vuex’importrouterfrom’@/router’import{getToken,setToken,removeToken}from’@/common/utils/auth’import{getInfo,getDeptUserTreeList,initGetToke…

    2022年6月6日
    36
  • DLL注入与卸载

    DLL注入与卸载DLL注入可用于编写外挂和病毒不易发现。voidCInjectDllToolDlg::StartInject(char*path,intpid){ intpathLen=strlen(path)+sizeof(char);//获取dll目录大小 HANDLEhPro=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); if(!

    2022年5月17日
    92
  • 思维导图整理大厂面试高频数组26: 合并区间中详解lambada表达式和toArray()用法, 力扣56

    思维导图整理大厂面试高频数组26: 合并区间中详解lambada表达式和toArray()用法, 力扣56此专栏文章是对力扣上算法题目各种方法的总结和归纳,整理出最重要的思路和知识重点并以思维导图形式呈现,当然也会加上我对导图的详解.目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解),毕竟算法不是做了一遍就能完全记住的.所以本文适合已经知道解题思路和方法,想进一步加强理解和记忆的朋友,并不适合第一次接触此题的朋友(可以根据题号先去力扣看看官方题解,然后再看本文内容).关于本专栏所有题目的目录链接,刷算法题目的顺序/注意点/技巧,以及思维导图源文件问题请点击此链接.想进大厂.

    2022年5月14日
    55
  • UML——包图[通俗易懂]

    UML——包图[通俗易懂]UML——包图

    2022年4月24日
    69
  • MYSQL 删除语句

    MYSQL 删除语句删除数据(DELETE)  如果你失忆了,希望你能想起曾经为了追求梦想的你。数据库存储数据,总会有一些垃圾数据,也会有一些不需要用的数据了,这些情况下,我们就可以删除这些数据,释放出一定的空间,给其他的数据使用使用前需注意:删除(DELETE),是删除一(条)行数据,图1里,有4条(行)数据,换句话说,你要删除第四条名字为“巴巴”的用户,那么关于他的id

    2022年6月24日
    49
  • matlab 画圆

    matlab 画圆一、绘制圆点plot(1,2,’ro’)二、绘制圆形1、空心圆:11、plot>>aplha=0:pi/40:2*pi;>>r=2;>>x=r*cos(aplha);>>y=r*sin(aplha);>>plot(x,y,’-‘);>>axisequal22、rectanglerectangle(‘position’,[0-3,0

    2022年6月19日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号