码迷,mamicode.com
首页 > 编程语言 > 详细

C++文件流

时间:2016-06-15 00:02:44      阅读:428      评论:0      收藏:0      [点我收藏+]

标签:

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

 #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++文件流

标签:

原文地址:http://www.cnblogs.com/ranranblog/p/5585552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!