我正在编写处理使用哈希值的文件的代码.我需要读取一个块,然后散列它,然后写入它,然后读取另一个块等.
换句话说,我需要做很多阅读和写作.我确信这很简单,但我只是想由专业人士运行它…
做以下事情是可能的,也是可以接受的:
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); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。