Visual c++ msvcstream不可用

Visual c++ msvcstream不可用,visual-c++,visual-studio-2019,Visual C++,Visual Studio 2019,这不是一个真正的问题,但更多的是一个提示:除了最基本的任务外,MS版本STL中的流几乎不可用 我一直在尝试做以下工作(使用ifstream的一个实例作为实际参数): GCC中的代码没有问题 有根据的猜测:您正在阅读一个文本文件-或者至少,您正在以文本模式打开流-并且遇到自动转换为\r\n的\n对。如果要按原样读取和计数字节,请以二进制模式打开流。根据C11标准:“ftell函数获取流所指向的流的文件位置指示器的当前值。对于二进制流,该值是文件开头的字符数。对于文本流,其文件位置指示器包含未指定的

这不是一个真正的问题,但更多的是一个提示:除了最基本的任务外,MS版本STL中的流几乎不可用

我一直在尝试做以下工作(使用ifstream的一个实例作为实际参数):


GCC中的代码没有问题

有根据的猜测:您正在阅读一个文本文件-或者至少,您正在以文本模式打开流-并且遇到自动转换为
\r\n
\n
对。如果要按原样读取和计数字节,请以二进制模式打开流。根据C11标准:“ftell函数获取流所指向的流的文件位置指示器的当前值。对于二进制流,该值是文件开头的字符数。对于文本流,其文件位置指示器包含未指定的信息,可由
fseek
函数使用,用于将流的文件位置指示器返回到调用
ftell
时的位置;两个这样的返回值之间的差异不一定是对写入或读取的字符数的有意义的度量。“我的,你太棒了!在二进制模式下打开文件完成了任务!我想我应该开始在头发上抹灰烬一个星期,或者另找一份室内装饰的工作。。。幸好你花时间回答随机的Qs,这样像我这样的白痴就可以保住他们的工作了!
void test(std::istream& is)
{
   auto pos1 = is.tellg();
   is.read(some_buffer, some_size);
   auto pos2 = is.tellg();
   assert(is.gcount() == some_size);
   assert(pos2 == pos1 + is.gcount());   // fails intermittently, with a difference of 1 byte!
}