关于源的操作,跪求高人指点
关于流的操作,跪求高人指点!
我有这样一个问题,现在有这样一个函数,通过二进制数据流读特定的文件,然后把这个流传下去进一步操作,代码如下
我现在要做的事情是拿到这个数据流,改变其中一部分的值,然后再往下传。也就是说,在上面两行代码之间做一个操作,把流的值改变了之后再调用那个重载的read函数。
我尝试了把读文件的那个流改为
另外我尝试了获取stream的缓冲区,然后向缓冲中写值,但是没有写进去。代码如下
其中,ptrData是一个数组的指针,nLength是拷贝的长度。但是尽管这样写了,流中的数据还是没有改变。
现在想要请教大家的是如何改变流中的值,让我可以顺利的将改变后的流传递下去。
p.s.因为运行速率的问题,写临时文件的方案已经被否决,只能想办法在内存中改变流中的数值。或者大家还有什么其他比较好的方案,请指教!拜谢!
------解决方案--------------------
把流都读入 string,然后操作 string.
------解决方案--------------------
1. 用string操作buffer(哪怕含\0)也是可以的. 只是你初始化的时候, 需要注意.
2. 可以使用Windows内存映射文件, 在映射的时候, 设置权限为"FILE_MAP_COPY".
这样修改都发生在内存中.
参考:
http://www.cnblogs.com/fangyukuan/archive/2010/09/09/1822216.html
我有这样一个问题,现在有这样一个函数,通过二进制数据流读特定的文件,然后把这个流传下去进一步操作,代码如下
void read(std::string filename)
{
……
std::ifstream ifs(filename.c_str(), std::io::binary | std::io::in);
read(std::istream& ifs);// 一个重载的read函数
……
}
我现在要做的事情是拿到这个数据流,改变其中一部分的值,然后再往下传。也就是说,在上面两行代码之间做一个操作,把流的值改变了之后再调用那个重载的read函数。
我尝试了把读文件的那个流改为
std::fstream,打开方式为
std::io::binary | std::io::in | std::io::out,这样的方式,这样会有个问题,就是在改变了流的值之后,在关闭流之后会改写源文件,当然改写了源文件的话,这个实现就是错误的。
另外我尝试了获取stream的缓冲区,然后向缓冲中写值,但是没有写进去。代码如下
std::streambuf* buf = ifs.rdbuf();
buf->sputn(ptrData, nLength);
其中,ptrData是一个数组的指针,nLength是拷贝的长度。但是尽管这样写了,流中的数据还是没有改变。
现在想要请教大家的是如何改变流中的值,让我可以顺利的将改变后的流传递下去。
p.s.因为运行速率的问题,写临时文件的方案已经被否决,只能想办法在内存中改变流中的数值。或者大家还有什么其他比较好的方案,请指教!拜谢!
二进制数据流
内存
------解决方案--------------------
把流都读入 string,然后操作 string.
------解决方案--------------------
1. 用string操作buffer(哪怕含\0)也是可以的. 只是你初始化的时候, 需要注意.
char buf[256];
// string str(buf); // 非法, 因为buf含\0
string str(256, 0);
copy(buf, buf+256, str.begin, str.begin());
2. 可以使用Windows内存映射文件, 在映射的时候, 设置权限为"FILE_MAP_COPY".
这样修改都发生在内存中.
参考:
http://www.cnblogs.com/fangyukuan/archive/2010/09/09/1822216.html