繁体   English   中英

std :: basic_fstream :: put()无效

[英]std::basic_fstream::put() has no effect

我有以下代码:

#include <iostream>
#include <fstream>

int main(int argc, char *argv[]) {
    if (argc != 2) {
        std::cout << "Usage: basics <file>" << std::endl;
        return 0;
    }

    std::basic_fstream<unsigned char> stream;

    stream.open(argv[1], std::fstream::out);
    stream.put('T');
    stream.put('E');
    stream.put('S');
    stream.put('T');
    stream.flush();
    stream.close();

    return 0;
}

正在创建文件,但当我在编辑器中打开它时,里面没有任何内容。 我的编译器是gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
它出什么问题了?

引用std :: basic_ostream :: put

与格式化输出函数不同,如果输出失败,此函数不会设置failbit。

即使您检查流状态,也不会显示任何错误。 但是,如果您尝试使用格式化的输出操作编写某些内容,则会抛出std::bad_cast异常,因为在可能的原因中,没有与该语言环境对应的方面,该操作完成后将对其进行检查。

原始操作不关心本地化,因此它不会因为这个原因而失败,而如果原始写入失败则会失败。

的std :: has_facet

例外
std :: bad_cast if std :: has_facet(loc)== false。

实际上, std::ctype专门用于charwchar_t而不是unsigned char ,你必须手动完成。 对于en_GB.utf8std::has_facet<std::ctype<unsigned char>>( std::locale("en_GB.utf8") ) == false

暂无
暂无

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

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