问题描述
当我将Bmp作为流传递时,函数总是返回,
use std::rc::Rc;
pub struct DieselConnection {}
pub struct WrapperConnection {
pub conn: Rc<DieselConnection>,}
pub enum ConnectionError {}
impl DieselConnection {
pub fn add_user(&self,name: &str) -> Result<(),ConnectionError> {
Ok(())
}
pub fn transaction<T,E,F>(&self,f: F) -> Result<T,E>
where
F: FnOnce() -> Result<T,E>,{
self.begin_transaction();
let result = f();
if result.is_ok() {
self.end_transaction();
} else {
self.abort_transaction();
}
return result;
}
fn begin_transaction(&self) {}
fn end_transaction(&self) {}
fn abort_transaction(&self) {}
}
impl WrapperConnection {
pub fn add_user(&mut self,ConnectionError> {
self.conn.add_user(name)
}
pub fn transaction<T,F>(&mut self,E>
where
F: FnOnce(&mut WrapperConnection) -> Result<T,{
let temp_conn = self.conn.clone();
temp_conn.transaction(|| f(self))
}
}
pub fn perform_insert_two_names_transactionally(
conn: &mut WrapperConnection,name1: &str,name2: &str,) -> Result<(),ConnectionError> {
conn.transaction(|conn| {
conn.add_user(name1)?;
conn.add_user(name2)?;
Ok(())
})
}
但文件正确保存在磁盘上。 当我从磁盘加载bpm时,函数返回正确的MD5。还传递“新的Bitmap(int x,int y);”值不同的返回相同的MD5。
为什么会这样?
D4-1D-8C-D9-8F-00-B2-04-E9-80-09-98-EC-F8-42-7E
有人可以解释这种奇怪的行为吗?
解决方法
由于各种原因(包括只能读取某些流,例如NetworkStream
的事实),流操作往往只会向前移动,因此保存图像可能只是将流进行到最后。
另外,并由各种有用的编辑者(@jpa)指出。
D4-1D-8C-D9-8F-00-B2-04-E9-80-09-98-EC-F8-42-7E
是空字符串的经典MD5和。
我的直觉是您只需要重置流的位置即可获得所需的结果
memoryStream.Seek(0,SeekOrigin.Begin)
// or
memoryStream.Position = 0;