C/C++教程

c++(十一)

本文主要是介绍c++(十一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文件操作

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

文件的头文件<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();

}

 

这篇关于c++(十一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!