![](/img/trans.png)
[英]How to read string from file with line break using ifstream c++?
[英]How to use ifstream of C++ to read from a file using length of the data rather than new line?
不管ifstream >>在找到换行符时终止读取文件,我都希望使用数据大小从文件中读取。 有没有办法做到这一点?
目前我使用mystream.read(字符串,长度),但我想使用“>>”运算符而不是read。
.read
是你要做的事情的方式。
想要用operator>>
代替它并没有多大意义,这根本就没有做到这一点。
只需使用.read
,然后继续。
更新要么,或者我误解了你的问题,Kris是对的。
像这样的东西? 这将它读入std :: vector。
inline void util::operator>>(const std::string &address, std::vector<std::string> &v) throw()
{
std::ifstream fin;
fin.open(address.c_str());
for(std::string s; std::getline(fin, s, '\n'); ) {
v.push_back(s);}
}
虽然,这是我5年前写的一些旧代码。 不确定这是否是最佳做法,但也许可能有帮助? 如果我误解了,请忽略我:)
operator >>只接受一个参数 - 对目标的引用。 如果不能在某个地方传递长度,你真的没有选择,只能使用.read()方法。
也许你可以覆盖operator >>并传入一个你自己的特殊类来嵌入一个长度参数。
这似乎只是使用>>语法的很多工作。
那么,如果语法不会让您感到困惑,请考虑以下内容:
char g_buf[MAX_BUFFER_LEN];
// The operator>> does not stop reading until it hits the end of file or the data read equals to specified cnt
istream& operator>>(istream& in, int cnt)
{
return in.getline(g_buf, cnt, char(6));
}
int main()
{
ifstream in("e:/a.txt");
// Reads 200 chars from file and put them in g_buf
in>>200;
cout<<g_buf<<endl;
in.close();
}
如果您真的只想让客户端代码使用operator>>
,您可以编写一个使用中间类型调用.read()
的运算符。
class Buffer
{
char * myData;
std::size_t mySize;
public:
Buffer ( char * data, std::size_t size )
: myData(data), mySize(size)
{}
friend operator>> ( std::istream& stream, Buffer& buffer )
{
return stream.read(buffer.myData, buffer.mySize);
}
};
这允许你写:
static const std::size_t size = 100;
char data[size];
std::cin >> Buffer(data, size);
如果您知道要读取具有已知长度的多个零件,这可能非常有用,例如:
static const std::size_t header_size = 5;
static const std::size_t stream_size = 20;
static const std::size_t footer_size = 12;
char header[header_size];
char stream[stream_size];
char footer[footer_size];
std::cin >> Buffer(header, header_size)
>> Buffer(stream, stream_size)
>> Buffer(footer, footer_size);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.