zoukankan      html  css  js  c++  java
  • ifstrem流不能使用ios::app标示

    项目基本结束啦,上周五我们带着源代码去客户公司部署。

    同一份代码,换了个旧版本的GCC编译器,编译时就有种不好的预感,果然编译出来的程序的执行结果就死活不对。

    Linux下Debug了半天,终于将问题缩小到了下面一行代码上:

    fs.open(filePath, ios::binary | ios::app);

    这个fs是由函数的模板参数传递下来的,即可能是输入流,也可能是输出流,该部分代码主要功能是校验需要打开的文件是否合法并将传入的文件流给open了。

    在传入的fs是输入流时,fs的open函数执行会失败,即无法打开指定文件。

    对于输入流而言,只是读取流中的内容,不存在对其追加的需求,所以我试着把ios::app标记移除,果然可以正常打开输入流了。

    想想还是让一个函数承载了混乱职责,才出现了输入流也以app模式打开这种奇怪代码,最终我们决定将校验文件是否合法这一功能单独提取一个函数,而文件流的打开由调用方自己去维护。

    总结:老版本的GCC编译器对于输入流ifstream的打开标记做了严格的限制,如果以app模式打开一个输入流是会失败的。

    最新版的GCC编译器更加仁慈一点,对于输入流以app模式打开,不会导致流打开失败,只不过这个app模式对于输入流无效罢了。

  • 相关阅读:
    修改默认runlevel
    shell数学运算
    Ubuntu碎碎念
    编译Linux-2.6.23内核中遇见的错误
    CentOS设置静态IP
    多线程--对象锁和类锁
    [Unity移动端]Touch类
    [Lua]string与中文
    MQTT 5.0 新特性(四)Clean Start 与 Session Expiry Interval
    EMQ 9 月 新发 | EMQ X Enterprise 3.4.0 功能概览
  • 原文地址:https://www.cnblogs.com/itZhy/p/2733827.html
Copyright © 2011-2022 走看看