繁体   English   中英

写入ofstream,然后用ifstream读取不会读取整个文件

[英]Write to ofstream followed by read with ifstream doesn't read entire file

以下程序写入100个字节,但不会全部读取回来。 为什么?

#include <iostream>
#include <random>
#include <vector>
#include <climits>
#include <algorithm>
#include <map>
#include <fstream>
#include <iomanip>

int main()
{
    constexpr size_t file_size{100};
    std::random_device r{};
    auto min = std::numeric_limits<unsigned char>::min();
    auto max = std::numeric_limits<unsigned char>::max();
    std::uniform_int_distribution<size_t> ud{min,max};

    {
        std::ofstream ofs{"otp.bin",std::ios::binary};
        for(size_t i{}; i < file_size; ++i) {
            ofs << static_cast<unsigned char>(ud(r));
        }
        ofs.close(); // not needed? 
    }

    std::ifstream ifs{"otp.bin",std::ios::binary};

    unsigned char c{};
    size_t i{};
    while(ifs >> c) {
        std::cout << std::setw(4) << std::hex << static_cast<unsigned int>(c) << std::dec << ((++i % 10 == 0) ? '\n' : ' ');
    }

    std::cout << '\n' << i << " bytes read.\n";
    return 0;
}

有时我得到99、94、96,但从来没有得到100。我在VS2015,clang和gcc上得到这种行为。

是一个在线示例。

ifs >> c

默认情况下跳过空白。

ifs >> std::noskipws;

循环之前还读取空白字节。


ofs.close(); // not needed? 

确实不需要,当流超出范围时,文件将关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM