C++文件流

Posted ranran1203

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++文件流相关的知识,希望对你有一定的参考价值。

文件流:以文件为输入输出对象的流

 #include<fstream>

一、文件操作打开一个输入或输出文件

    1.打开一个输出文件

        ofstream fout;

        fout.open("1.txt");

   2.打开一个输入文件

     ifstream  fin;

     fin.open("2.txt");

   3.打开一个文件,既可以输入也可以输出

     fstream finout;

     finout.open("3.txt");

更便捷方式   ofstream fout("1.txt");     ifstream  fin("2.txt");   fstream finout("3.txt");  不指定路径就在默认的项目文件中

二.文件的输入,输出

    1.>> ,<< 方式

     fout<< “hello world";

     char ch;

     fin>>ch;

操纵符 功能 输入/输出 
            dec 格式化为十进制数值数据 输入和输出 
            endl 输出一个换行符并刷新此流 输出 
    ends 输出一个空字符 输出 
    hex 格式化为十六进制数值数据 输入和输出 
    oct 格式化为八进制数值数据 输入和输出 
    setpxecision(int p) 设置浮点数的精度位数 输出

  例如:要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。

    2.函数形式

    1)fout.put(ch) 输出一个字符

     2)get()函数比较灵活,有3种常用的重载形式:

          1)fin.get(ch) 取出一个字符存储在成中,或者ch=fin.get();功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符while(fin.get(ch))检测是否读到文件尾

          2)ifstream &get(char *buf,int num,‘\n‘‘);这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符‘‘\n‘‘。        例如:

            file2.get(str1,127,‘A‘);//从文件中读取字符到字符串str1,当遇到字符‘‘A‘‘或读取了127个字符时终止。

    3) getline :fin.getline(buf,80); //前提char buf[80];

读写数据块
    要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:

    read(unsigned char *buf,int num);
    write(const unsigned char *buf,int num);

  4)read()从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,可以用成员函数 int gcount();来取得实际读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,值得注意的是缓存的类型是 unsigned char *,有时可能需要类型转换。

例:

    unsigned char str1[]="I Love You";
    int n[5];
    ifstream in("xxx.xxx");
    ofstream out("yyy.yyy");
    out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中
    in.read((unsigned char*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换
    in.close();out.close();

三.关闭文件

   fin.close();

四.检测文件是否打开成功

  if(fin.fail()) 

  if(!fin.good())

  if(!fin) 

  括号内为真,则打开失败

 

五、检测EOF
  成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。原型是int eof();

例:if(in.eof())ShowMessage("已经到达文件尾!");

 六、随机读取文件

seekg()输入指针移动到指定位置,seekp()输出指针移动到指定位置,用app的话,seekp方法会失效

    fin.seekg(streamoff offset,seek_dir origin);

  offset 一般是字节数;

   seek_dir origin  : ios::beg  开始位置

                             ios::cur 当前位置

                             ios::end 文件结尾

   fin.seekg(字节数);移动到第字节数+1的位置

 

 

 

以上是关于C++文件流的主要内容,如果未能解决你的问题,请参考以下文章

C++文件流

C++中输入输出流及文件流操作笔记

C++文件的操作

用c++处理文件流

C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

在 C++ 文件流中复制静态变量