istream对象不读任何字符

时间:2014-04-03 13:07:57

标签: c++ istream

调用readsome()方法之后为什么istream对象不给缓冲区中的任何字符?班级建设有错误吗?

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

StreamBuffer.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;
}

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

1 个答案:

答案 0 :(得分:0)

您的代码中有undefined behavior,因为您尝试读入空字符串。您需要设置buffer的大小。


无关的逻辑错误:在FullBufferWithData函数中,即使读取文件时出错,也会返回“OK”。