加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 二进制读写器同时打开?

发布时间:2020-12-15 17:22:44 所属栏目:百科 来源:网络整理
导读:我正在编写处理使用哈希值的文件的代码.我需要读取一个块,然后散列它,然后写入它,然后读取另一个块等. 换句话说,我需要做很多阅读和写作.我确信这很简单,但我只是想由专业人士运行它… 做以下事情是可能的,也是可以接受的: BinaryReader br = new BinaryRea
我正在编写处理使用哈希值的文件的代码.我需要读取一个块,然后散列它,然后写入它,然后读取另一个块等.

换句话说,我需要做很多阅读和写作.我确信这很简单,但我只是想由专业人士运行它…

做以下事情是可能的,也是可以接受的:

BinaryReader br = new BinaryReader (File.OpenRead(path));
BinaryWriter bw = new BinaryWriter (File.OpenWrite(path));
br.dostuff();
bw.dostuff();

我记得在尝试打开和写入文件时遇到某种冲突的文件流错误,我不知道我做了什么才能得到它.是两个文件流是问题吗?我可以有一个流来读取和写入吗?

解决方法

这是完美的可能和期望,技术性,如果你的写方法不改变文件的长度并且总是在读者后面,这不应该给出任何问题.实际上,从API的角度来看,这是可取的,因为这允许用户控制从哪里读取以及在哪里写入. (这是写入不同文件的推荐规范,如果在加密过程中发生任何不良事件,您的输入文件不会搞砸).

就像是:

protected void Encrypt(Stream input,Stream output)
{
    byte[] buffer = new byte[2048];

    while (true)
    {
        // read 
        int current = input.Read(buffer,buffer.Length);
    if (current == 0)
                     break;

        // encrypt
        PerformActualEncryption(buffer,current);

        // write
        output.Write(buffer,current);
    }   
}

public void Main()
{
    using (Stream inputStream  = File.Open("file.dat",FileMode.Open,FileAccess.Read,FileShare.ReadWrite))
    using (Stream outputStream = File.Open("file.dat",FileAccess.Write,FileShare.ReadWrite))
    {
        Encrypt(inputStream,outputStream);
    }
}

既然你正在使用加密,我甚至建议在另一个专门的流中执行实际的加密.这很好地清理了代码.

class MySpecialHashingStream : Stream
{
...
}

protected void Encrypt(Stream input,Stream output)
{
    Stream encryptedOutput = new MySpecialHashingStream(output);
    input.CopyTo(encryptedOutput);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读