ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++(十一)

2022-07-08 17:32:00  阅读:182  来源: 互联网

标签:十一 ifs buf ios c++ char 文件 open


文件操作

程序运行时产生的临时数据可以通过文件将数据持续化,程序运行结束时也不会被释放

文件的头文件<fstream>

文件类型

1. 文本文件        文件以文本的ASCII码的形式存储在计算机中

2.二进制文件     文件以文本的二进制的形式存储咋计算机中,用户一般不能直接读懂他们

 

操作文件的三大类

1.ofstream:写操作

2.ifstream:读操作

3.fstream:读写操作

写文件:创建流对象 ofstream ofs;   打开文件ofs.open("文件路径",打开方式);   写数据ofs<<"写入的数据";    关闭文件ofs.close();

ios::in        为读文件而打开文件

ios::out      为写文件而打开文件

ios::ate      初始位置:文件尾

ios::trunc   如果文件存在先删除,再创建

ios::binary  二进制方式

ios::app      追加方式写文件.也是在文件尾

文件打开方式可以配合使用 ios::binary | ios::out

读文件:创建流对象ifstream ifs;打开文件并判断文件是否打开成功 ifs.open("文件路径“,打开方式); 读数据 有四种读取方式 ;关闭文件  ifs.close();

先写ifs.open("文件路径“,打开方式); 然后判断文件是否打开成功if ( !ifs.is_open() ) {cout<<"文件打开失败”<<endl; return 0}里面的函数进行判断 如果是1表示成功打开,如果返回为0表示打开失败

第一种读数据的方式

char buf【1024】={0};把文件中的数据放到字符数组中 ,利用>> 当数据全部读入之后,while会退出 读到末尾会返回一个假的标志

while(ifs>>buf) { cout<<buf<<endl;} 然后输出buf中的数据

第二种读取方式

char  buf【1024】={0};//getline是获取一行的意思 里面的两个参数是(char * str,std::streamsize——Cout)其中buf数组名就是第一个元素的首地址

                                       //第二个参数表示要读多少个字节数,

while(ifs.getline(buf ,sizeof(buf)))

{

    cout<<buf<<endl;//输出buf

}

第三种读取方式

string  buf;

while(getline(ifs,buf))//第一个参数是基础的输入流对象 第二个参数是要放入的字符串,这里是全局的getline

{

    cout<<buf<<endl;//输出buf

}

第四种方式,不太推荐

一个一个地读取数据,读取之后放入字符里

char c;

while((c=ifs.get())!=EOF)//get函数每一次只读取一个字符,把读到的字符放到字符c里面,并判断是否读到文件尾部EOF

{

    cout<<c;

}

 

二进制的方式对文件进行读写操作

打开方式指定为ios::binary

二进制方式写文件主要是利用流对象调用成员函数write

函数原型:ostream& write(const char *buffer,int len);

字符指针buffer只想内存中的一段存储空间,len是读写的字节数

class person 

{

 public: 

          char m_Name[64];//尽量不要使用string  使用char

          int  m_Age;

}

void test()

{

ofstream ofs;    ofs.open("person.txt",ios::out | ios::binary);    写文件  Person p={“张三” ,18}; 

ofs.write((const char * )&p,sizeo(Person))//强制转换,若直接对p取地址返回的是Person* 但是我们之前提到过这个函数的原型是const char *

关闭文件   ofs.close();

}

 

 

二进制方式读文件

二进制方式读文件主要利用流对象调用成员函数read

函数原型:istream&read(char *buffer,int len);/字符指针buffer指向内存中一段存储空间  len是读写的字节数

class person 

{

 public: 

          char m_Name[64];//尽量不要使用string  使用char

          int  m_Age;

}

void test()

{

//创建流对象

   ifstream  ifs;

//打开文件 判断文件是否成功打开

  ifs.open("person.txt",ios::in | ios::binary);  //以二进制的形式读文件

  if (!( ifs.is_open()) ) //如果函数ifs.is_open()返回的是1 那么说明打开成功,否则打开失败

{

   cout<<"文件打开失败"<<endl;

   return 0;

}

//读文件

Person p;//这里的Person  p相当于char p 只不过p的类型是Person,用来接收Peson类数据

ifs.read((char *) &p,sizeof(Person));

cout<<"姓名: "<<p.m_Name<<"年龄"<<p.m_Age<<endl;

//关闭文件

ifs.close();

}

 

标签:十一,ifs,buf,ios,c++,char,文件,open
来源: https://www.cnblogs.com/xxsadd/p/16459089.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有