zoukankan      html  css  js  c++  java
  • iostream迭代器操作"txt文本文件"无法写入的思考

    题:从“in.txt”读取数据,然后分奇偶分别存到“out_odd.txt”和“out_even.txt”中

    #include <QCoreApplication>
    #include <iostream>
    #include <fstream>
    #include <iterator>
    #include <vector>
    #include <string>
    #include <stdlib.h>
    using std::cout; using std::endl;
    using std::vector;
    using std::string;
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        std::ifstream ifs("./in.txt");
        std::ofstream ofs_odd("./out_odd.txt",std::ios::out), ofs_even("./out_even.txt",std::ios::out);
        std::istream_iterator<int> in(ifs), in_eof;
        std::ostream_iterator<int> out_odd(ofs_odd, " "), out_even(ofs_even, "
    ");
    
        std::for_each(in, in_eof, [&out_odd, &out_even](const int i) {
               *(i & 0x1 ? out_odd : out_even)++ = i;
               //cout << i;
           });
        return a.exec();
    }
    

    出现了一个很奇怪的现象,文件out_odd.txt”和“out_even.txt”虽然创建了,可是文件是空,测试了一下“in.txt”中的数已经读出来了,为什么会出现这样奇怪的文件呢?我一度怀疑是不是编码方式不对,后来偶然情况下,加入把打开文件关闭的语句,文件神奇的有数据了。

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        std::ifstream ifs("./in.txt");
        std::ofstream ofs_odd("./out_odd.txt",std::ios::out), ofs_even("./out_even.txt",std::ios::out);
        std::istream_iterator<int> in(ifs), in_eof;
        std::ostream_iterator<int> out_odd(ofs_odd, " "), out_even(ofs_even, "
    ");
    
        std::for_each(in, in_eof, [&out_odd, &out_even](const int i) {
               *(i & 0x1 ? out_odd : out_even)++ = i;
               cout << i;
           });
        ofs_odd.close();
        ofs_even.close();
        return a.exec();
    }
    

    为什么会出现这种情况呢?原来文件输出的数据先是放到一个“basic_streambuf()”的地方,并非立马刷新的,当调用file.close()的时候,数据流被刷新到文件中,我们可以直接加入刷新操作,也可以将数据刷新到文件中。

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        std::ifstream ifs("./in.txt");
        std::ofstream ofs_odd("./out_odd.txt",std::ios::out), ofs_even("./out_even.txt",std::ios::out);
        std::istream_iterator<int> in(ifs), in_eof;
        std::ostream_iterator<int> out_odd(ofs_odd, " "), out_even(ofs_even, "
    ");
    
        std::for_each(in, in_eof, [&out_odd, &out_even](const int i) {
               *(i & 0x1 ? out_odd : out_even)++ = i;
               cout << i;
           });
        ofs_odd << std::endl;
        ofs_even << std::endl;
        return a.exec();
    }



  • 相关阅读:
    springboot2 整合雪花算法,并兼容分布式部署
    docker 在 linux 搭建私有仓库
    jdbc 几种关系型数据库的连接 和 driver_class,以及简单的使用
    springboot2 整合发送邮件的功能
    oracle 唯一新约束 和 逻辑删除的 冲突处理办法
    oracle 一些常见操作方法
    spring-cloud-stream 整合 rabbitmq
    springboot2 整合 rabbitmq
    docker 安装 rabbitmq 消息队列
    网络统计学目录
  • 原文地址:https://www.cnblogs.com/vczf/p/6823254.html
Copyright © 2011-2022 走看看