我有以下代码:
#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)
它有什么问题?
答案 0 :(得分:0)
与格式化输出函数不同,如果输出失败,此函数不会设置failbit。
即使您检查流状态,也不会显示任何错误。但是,如果您尝试使用格式化输出操作编写内容,则会抛出std::bad_cast
异常,因为在可能的原因中,没有与该区域设置对应的方面,这会被检查当该操作完成时。
原始操作不关心本地化,因此它不会因为这个原因而失败,而如果原始写入失败则会失败。
<强>例外强>
std :: bad_cast if std :: has_facet(loc)== false。
事实上,std::ctype
专门用于char
和wchar_t
而不是unsigned char
,您必须手动执行此操作。对于en_GB.utf8
,std::has_facet<std::ctype<unsigned char>>( std::locale("en_GB.utf8") ) == false