basic_ifstream<...>::read() 不读取任何内容
basic_ifstream<...>::read() doesn't read anything
根据以下代码构建的程序:
#include <fstream>
using std::basic_ifstream;
#include <ios>
using std::streamsize;
#include <ZenLib/Conf.h>
using ZenLib::int8u;
int main() {
#define charT int8u
#define T basic_ifstream<charT>
T ifs ("/proc/cpuinfo", T::in | T::binary);
#undef T
streamsize const bufsize (4096);
charT buf[bufsize];
#undef charT
return !ifs.read(buf, bufsize).gcount();
}
返回1。
因此std::basic_ifstream<ZenLib::int8u>::read()
无法从/proc/cpuinfo
中提取任何字节。
我做错什么了吗?
除char
或wchar_t
之外的任何内容的完整std::char_traits
未定义的行为(我怀疑你的charT
是unsigned char
,而不是char
。)如果您想使用不同类型的字符,您将必须定义一个新的特征类;用于std::istream
anfstd::ostream
,您还必须为类型。
问题是你想做什么。在你的例子中,你只调用CCD_ 11。如果是这种情况,最简单的解决方案是可能只是下降到系统级别的功能。这些可能也需要一个char*
作为缓冲区,但是unsigned char*
中的reinterpret_cast
将起作用。你可以这样做std::istream<char>::read
也是,但如果您有std::istream
,有一种确定的可能性,一些格式化的输入将产生,在你拿到你的reinterpret_cast
英寸
流库设计用于char
和wchar_t
等字符类型,而不是整数:
C++11标准:27.2.2
- 在Clause 27的类中,一个名为的模板形式参数charT表示包含char的类型集合的成员,wchar_t和任何其他实现定义的字符类型满足任何iostream所在字符的要求组件可以被实例化
也许从这个开始:
int main()
{
std::ifstream ifs("/proc/cpuinfo", std::ios::binary);
std::cout << ifs.rdbuf();
}
相关文章:
- 是否有任何内置的哈希图函数来处理 c++ 中的值输入?
- 为什么ifstream没有读取任何内容
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- C++使用用户名/SID 或备用读取任何窗口用户 HKEY
- C++ 中是否有任何内置阶乘函数?
- 无法使用 QSerialPort 读取任何内容
- 读取任何与PC兼容的赛车方向盘输入
- 是否有任何内置函数可以告诉编译器分支是否可预测
- 套接字记录未读取任何消息
- 在 C++ 中立即设置故障位(在读取任何字节之前)
- 我需要在C /C#中使用图形.我可以使用任何内置的C /C#库
- 是否有任何内置类可以处理C 中的大整数值
- 文件I/O没有读取任何内容
- c ++中是否有任何内置功能可以在计划的时间运行任务
- 是否有任何内置的 UTF 在 c++ 在窗口中
- 逐字节读取任何文件(不是.bin文件)
- C++ std::istream readsome不读取任何内容
- boost::asio::ip::tcp::socket 不读取任何内容
- basic_ifstream<...>::read() 不读取任何内容
- 在VC++2010中执行任何内置的ARRAY函数