从位图流C#计算MD5的问题

问题描述

当我将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;