iStream 对象不读取任何字符
istream object don't read any char
为什么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"。
相关文章:
- 在处理任何字符大小的模板中使用字符串文本
- 使用 ISdigit 通知任何检测到的非法字符
- 是否有任何区域设置会影响宽字符编码?
- C++ - 将任何文件的字节读取到无符号字符数组中
- 在 std::getline() 上使用任何字符作为分隔符
- 用wchar_t处理 unicode 字符好吗?它不会引起任何问题吗?
- 将十六进制字符数组存储在字节数组中,而无需更改为 ASCII 或其他任何东西
- 使用 C 字符串和指针.删除除小写和空格以外的任何字符
- 我的 c++ 程序不打印任何字符,但是如果我将它们更改为 int,代码可以完美运行
- 如果在输入中,我给出任何字符数据,为什么这不会抛出部分
- 如何在不删除任何字符的情况下将字符从字符串中的某个位置移动到其最前面
- Strchr不起作用,或者我需要一个替代方案来检查给定字符串中的任何字符是否是另一个字符串的一部分
- 不分配任何字符内存的常量字符串构造函数?
- 如何将数字拆分为其数字并将它们相加,如果存在任何字符,则应"invalid input"输出?
- 如果我得到任何字符,请退出程序
- 在搜索单词时使用问号来代表任何字符
- 为什么程序在 while 循环中继续输入任何字符
- iStream 对象不读取任何字符
- 匹配除双引号以外的任何字符
- 在字符串数组中添加任何字符