mow*_*ker 5 c# filestream binaryreader binarywriter
我正在编写处理使用哈希的文件的代码。我需要读取一个块,然后对其进行哈希处理,然后写入它,然后读取另一个块,等等。
换句话说,我需要做大量的阅读和写作。我确信这真的很简单,但我只是想由专业人士运行它......
是否可能并且可以接受执行以下操作:
BinaryReader br = new BinaryReader (File.OpenRead(path));
BinaryWriter bw = new BinaryWriter (File.OpenWrite(path));
br.dostuff();
bw.dostuff();
Run Code Online (Sandbox Code Playgroud)
我记得在尝试打开和写入文件时遇到了某种冲突的文件流错误,并且我不确定我做了什么来获得它。问题是两个文件流吗?我可以有一个流来读取和写入吗?
这是完全可能和期望的,从技术上讲,如果您的写入方法不会改变文件的长度并且始终落后于读取器,那么这应该不会产生任何问题。事实上,从 API 的角度来看,这是可取的,因为这允许用户控制从何处读取和向何处写入。(建议写入不同的文件,以防在加密过程中发生任何不好的事情,您的输入文件不会被弄乱)。
就像是:
protected void Encrypt(Stream input, Stream output)
{
byte[] buffer = new byte[2048];
while (true)
{
// read
int current = input.Read(buffer, 0, buffer.Length);
if (current == 0)
break;
// encrypt
PerformActualEncryption(buffer, 0, current);
// write
output.Write(buffer, 0, current);
}
}
public void Main()
{
using (Stream inputStream = File.Open("file.dat", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (Stream outputStream = File.Open("file.dat", FileMode.Open, FileAccess.Write, FileShare.ReadWrite))
{
Encrypt(inputStream, outputStream);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,由于您正在使用加密,我什至建议在另一个专用流中执行实际加密。这很好地清理了代码。
class MySpecialHashingStream : Stream
{
...
}
protected void Encrypt(Stream input, Stream output)
{
Stream encryptedOutput = new MySpecialHashingStream(output);
input.CopyTo(encryptedOutput);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5075 次 |
| 最近记录: |