iStream 对象不读取任何字符

istream object don't read any char

本文关键字:任何 字符 读取 对象 iStream      更新时间:2023-10-16

为什么istream对象在调用readsome()方法后不会在缓冲区中给出任何字符?类结构有错误吗?

StreamBuffer.h

#ifndef StreamBuffer_h
#define StreamBuffer_h
#include <string>
#include <fstream>
#include <iostream>
#include <iterator>
enum StreamBufferState
{
  STREAMBUFFER_OK = 0,
  STREAMBUFFER_EOF = 1
};
class StreamBuffer
{
    std::fstream file;
    std::istream istrm;
    int maxBufferSize;
    std::string buffer;
 public:
    StreamBuffer(int maxBuffSize, const std::string& filename);
    ~StreamBuffer();
    void SetMaxBufferSize(unsigned int maxBuffSize);
  StreamBufferState FullBufferWithData();
    std::string GetDataBuffer();
};
#endif

流缓冲区.cpp

#include "StreamBuffer.h"
using namespace std;
StreamBuffer::StreamBuffer(int maxBuffSize, const std::string& filename) : istrm( !filename.empty() ? file.rdbuf() : cin.rdbuf() )
{
  SetMaxBufferSize(maxBuffSize);
    if(!filename.empty())
    {
        file.open(filename.c_str(),ios::in | ios::binary);
    }
    else
    {
        std::cin>>noskipws;
    }
}
StreamBuffer::~StreamBuffer()
{
    file.close();
}
void StreamBuffer::SetMaxBufferSize(unsigned int maxBuffSize)
{
  maxBufferSize = maxBuffSize;
}
StreamBufferState StreamBuffer::FullBufferWithData()
{
    istrm.readsome((char*)&buffer[0],maxBufferSize);
    if(istrm.eof())
        return STREAMBUFFER_EOF;
    return STREAMBUFFER_OK;
}
std::string StreamBuffer::GetDataBuffer()
{
    string buf = buffer;
  return buf;
}

文件已打开,但 readsome() 不读取缓冲区。

当您尝试读入空字符串时,代码中有未定义的行为。您需要设置buffer的大小。


一个不相关的逻辑错误:在FullBufferWithData函数中,即使读取文件时出错,您也会返回"OK"。