C++ 文件操作

一、读操作

文件类型分为两种
    1.文本文件 文件以文本的ASCII码存贮在计算机中
    2.二进制文件的二进制形式存储在计算机中,用户一般不能读懂他们

操作文件的三大类
    1.ofstream 写操作
    2.ifstream 读操作
    3.fstream 读写操作

警记:路径中不能有中文名称

ifstream ifs;//读操作
    ifs.open("C:\\Users\\28258\\Desktop\\111.TXT", ios::in);//只读
      //ifs.open("C:\\Users\\28258\\Desktop\\111.TXT", ios::in | ios::out); 读写
    //判断是否打开
    if (!ifs.is_open())
    {
        cout << "failing to open" << endl;
        return 0;
    }
打开方式解释
ios::in为读文件而打开文件
ios::out为写文件而打开文件
ios::ate初始位置:文件尾
ios::app追加方式写文件
ios::trunc如果文件存在先删除,再创建
ios::binary二进制方式

四种读操作:

//第一种
       char buf[1024] = { 0 };
       while (ifs>>buf)
       {
          cout << buf << endl;
      }
      第二种
      char buf[1024] = { 0 };
      while (ifs.getline(buf,sizeof(buf)))
      {
           cout << buf << endl;
      }
      第三种
       string buf;
       while (getline(ifs,buf))
       {
         cout << buf << endl;
      }
       第四种(不推荐使用,因为要一个一个遍历字符)
       char c;
       while ((c=ifs.get())!=EOF) //EOF end of file
       {
              cout << c;
       }
<**istream**>中的getline()函数有两种重载形式(第二种读操作):


    istream& getline (char* s, streamsize n );
    istream& getline (char* s, streamsize n, char delim );
从istream中读取至多n个字符(包含结束标记符)保存在s对应的数组中。即使还没读够n个字符,

如果遇到delim 或 字数达到限制,则读取终止,delim都不会被保存进s对应的数组中。

当第三个参数省略时,系统默认为'\0'<***string***>中的getline()函数有两种重载形式(第三种读操作)
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream&  is, string& str);

ifstream的get()用法
  get()函数比较灵活,有3种常用的重载形式,实际有6种重载:
  int get();
  istream& get ( char& c );
  istream& get ( char* s, streamsize n );
  istream& get ( char* s, streamsize n, char delim );
  istream& get ( streambuf& sb);
  istream& get ( streambuf& sb, char delim );
一种就是和put()对应的形式:ifstream &get(char &ch);
功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符
  
另一种重载形式的原型是: int get();
这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。

还有一种形式的原型是:ifstream &get(char *buf,int num,char delim='\n');
这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符
如果没使用 delim 这个参数,将使用缺省值换行符'\n'。
例如:
file2.get(str1,127,'A');//从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。

二、写操作

先写再读,记得关闭输入流

 ofstream ofs;//写操作
    ifstream ifs;//读操作
    
    ofs.open("C:\\Users\\28258\\Desktop\\111.TXT", ios::out | ios::app);

    if (!ofs.is_open())
    {
        cout << "failing to open" << endl;
        return 0;
    }

    const char *buf = { "hello world" };
    ofs.write(buf, sizeof(buf)+3);//此处sizeof为8,hello+空格+/n=8
    ofs.close();

ifs.open("C:\\Users\\28258\\Desktop\\111.TXT", ios::in);

if (!ifs.is_open())
    {
        cout << "failing to open" << endl;
        return 0;
    }
    char buff[1024] = { 0 };
    while (ifs >> buff)
    {
        cout << buff << endl;
    }
    
    ifs.close();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值