文件相关操作c++

1.C++中的文件和流

        C++中把文件看成是字节序列,即由一个个字节顺序组成。每个文件以结束符(EOF)结束,这种文件称为流式文件。可以把C++的文件看成是一个字符串。只不过这个字符串不是存放在内存中,而是存放在外存中。不是以‘\0’结尾,而是用EOF结尾。当打开一个文件时,该文件就和某个流关联起来。

2.c++中文件访问过程

  • 定义一个流对象(为文件找一个代理)
  • 打开文件:将流对象与文件关联起来(确定文件与流对象的代理关系)
  • 访问文件:和控制台访问类似,可以使用<<或>>操作
  • 关闭文件 :切断流对象与文件的关联(流对象与该文件没有关系,流对象可以再与其他文件关联起来

3.文件流类型

  • ifstream:输入文件流(类似cin)
  • ofstream:输出文件流(类似cout)
  • fstream:输入输出文件流

4.文件打开方式

  • 用流对象的成员函数open打开文件
  • 用流对象的构造函数打开文件

如果文件打开失败,返回0

无论是成员函数open还是通过构造函数,都有两个参数:

  1. 打开的文件名
  2. 文件打开模式(想对文件做什么操作)

三种流类型都有默认打开方式:

  • ifstream流对象是以in模式打开ifstream流对象是以in模式打开
  • ifstream流对象是以in模式打开
  • ifstream流对象是以in模式打开ifstream流对象是以in模式打开
//打开输入文件:
     ifstream infile; 
     infile.open(“file1”); 或  infile.open(“file1”, ifstream::in); 
     也可以利用构造函数直接打开:
     ifstream infile(“file1”);  或 ifstream infile(“file1” , ifstream::in);
//打开输出文件
    ofstream outfile; 
    outfile.open(“file2”); 或  outfile.open(“file2”, ofstream::out); 
    也可以利用构造函数直接打开:
    ofstream outfile(“file2”);  或  ofstream outfile(“file2” , ofstream::out);  
//打开输入输出文件
    fstream iofile(“file3”);
    fstream iofile(“file3”,  fstream:: in | fstream::out);

5.关闭文件

使用成员函数close()关闭文件与流对象直接的连接。对于输出文件,close会将缓冲区中的内容写入文件,main函数执行结束时,会关闭所有打开的文件,但最好是使用完文件后用close函数关闭文件。

6.文件顺序访问

  C++ ASCII文件的读写和控制台读写一样,可以用流提取运算符“>>”从文件读数据,也可以用流插入运算符”<<”将数据写入文件,也可以用文件流的其他成员函数读写文件,如get函数,put函数等。

判断文件结束的方式:

  • >>读:可以通过判断输入流对象值是否为0(不是指不能读数字0哦,只是说infile>>n的结果是0表示结束)
  • get读:判断读入字符是否是EOF
  • 其他方式读:通过成员函数eofeof函数不需要参数,返回一个整型值。当读操作遇到文件结束时,该函数返回1,否则返回0

注意:>>读取数据时以空格来判断数据之间的界限,比如 1 2 203 三个数据,读取后是“1”、“2”、“203”

7.文件的随机访问

  1. 文件定位指针(存储在输入/输出流对象中,个人感觉和迭代器或句柄类似)

文件定位指针:是一个long类型的数据 ,指出当前读写的位置。C++文件有两个定位指针:读指针和写指针。当文件以输入方式打开时,读指针指向文件中的第一个字节。文件以输出方式打开时,写指针指向文件中的第一个字节。当文件以添加方式打开时,写指针指向文件尾。

    2.获取文件定位指针的当前位置 :成员函数tellg(读文件定位指针相关)和tellp(写文件定位指针相关)

seekgseekp都有两个参数:第一个参数通常为long类型的整数,表示偏移量(字节);第二个参数指定移动的起始位置

  • 寻找方向:

ios::beg(默认):相对于流的开头     //如果函数只有一个参数,那就是默认使用相对流的开头

ios::cur:相对于流当前位置

ios::end:相对于流结尾

    3.设置文件定位指针的位置:成员函数seekgseekp ​​​​​​​

 

猜你喜欢

转载自blog.csdn.net/wu_qz/article/details/80237230