免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 C/C++ [c++]
最近访问板块 发新帖
查看: 1646 | 回复: 7
打印 上一主题 下一主题

[c++] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-16 11:21 |只看该作者 |倒序浏览
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
  fstream *pfs = new fstream;
  pfs->open("/tmp/ttt", ios_base::in | ios_base:ut | ios_base::app);
  if(!pfs->is_open())
  {
    cout << "open fail." << endl;
  }
  pfs->close();
  delete pfs;
  return(0);
}


c++中ios_base::in | ios_base:ut | ios_base::app不是有效的打开模式

那将无法像fp = fopen(name, "a+" 这样打开文件.

想了想fstream类的设计, 怎么就这么别扭呢

拿fstream和FILE对比, FILE流的打开模式有

     r
     r+
     w
     w+
     a
     a+

   它们涵盖了所有的打开需求, 这样的设计很简洁, 很好用, 作者肯定是深思熟虑后精心设计的.

   而fstream不但要创建对象, 然后打开, 打开的时候还有"无效的打开模式", 还有不能读写追加
   模式打开.
   最后还要关闭, 据说关闭前还有clear, 最后释放内存.

   累!!!!

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2012-06-16 14:43 |只看该作者
看你的代码风格,你应该是用Java/.net的吧?

“c++中ios_base::in | ios_base::out | ios_base::app不是有效的打开模式”
------ 这个就不清楚了,但我想应该不是“C++中”,而是“某个C++实现库”中

我用mingw4.6.1试过,是可以的
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    fstream fs( "tmp.1", ios_base::in|ios_base::out|ios_base::app );
    if( !fs )
    {
        cerr << "open fail.\n";
        return -1;
    }

    return 0;
}

论坛徽章:
0
3 [报告]
发表于 2012-06-16 14:54 |只看该作者
bruceteen 发表于 2012-06-16 14:43
看你的代码风格,你应该是用Java/.net的吧?

“c++中ios_base::in | ios_base:ut | ios_base::app不是 ...



咬文嚼字:  c++标准库是c++重要的组成部分

我用的是centos  c++ lib 4.1.2

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [报告]
发表于 2012-06-16 14:58 |只看该作者
那你的意思是什么?是不是mingw4.6.1有bug?

因为你的代码在mingw4.6.1中无误运行通过
而你说“c++中ios_base::in | ios_base:ut | ios_base::app不是有效的打开模式”,但mingw4.6.1中却让它通过了,那只能说明mingw4.6.1有bug了

论坛徽章:
0
5 [报告]
发表于 2012-06-16 15:09 |只看该作者
本帖最后由 inet_addr 于 2012-06-16 15:10 编辑

怪我, 没说清楚环境

[xxxxx@host3 ~]$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


[xxxxx@host3 ~]$ uname -a
Linux vm-host3 2.6.18-238.el5 #1 SMP Thu Jan 13 16:24:47 EST 2011 i686 i686 i386 GNU/Linux

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
6 [报告]
发表于 2012-06-16 15:14 |只看该作者
bruceteen 发表于 2012-06-16 14:43
看你的代码风格,你应该是用Java/.net的吧?


new?

good day ,**, long time no see.

论坛徽章:
0
7 [报告]
发表于 2012-06-16 15:24 |只看该作者
bruceteen 发表于 2012-06-16 14:58
那你的意思是什么?是不是mingw4.6.1有bug?

因为你的代码在mingw4.6.1中无误运行通过


算了, 告诉你的根据

c++ primer 中文版 第四版 p256
   
    3. 打开模式的有效组合
        out
        out | app
        out | trunc
        in
        in | out
        int | out | trunc

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
8 [报告]
发表于 2012-06-16 15:38 |只看该作者
[b]回复 [url=forum.php?mod=redirect&goto=findpost&pid=&ptid=3753415]6#[/url] [color=Olive]folklore[/color] [/b]
是啊
我去福州了,刚回来

[b]回复 [url=forum.php?mod=redirect&goto=findpost&pid=&ptid=3753415]7#[/url] [color=Olive]inet_addr[/color] [/b]
没看过《c++ primer》,据说其作者为微软工作,为人道德有缺陷。为了其主子的C++/CLR(也可能是managed C++,我不关心,忘了)能够加入C++标准而行贿其它C++委员会成员,事发后被Bjarne Stroustrup说情保了下来。

不过,它竟然说 in | out | app 不是有效组合实在是个反骨仔(哪怕事实就是如此),因为其主子的VC2008中就规定它为合法组合,见 fiopen.cpp 的 _Fiopen 函数,其中明确写着
"a+"
对应
ios_base::in | ios_base::out | ios_base::app
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP