这是完美的可能和理想,技术性,如果你的写法不改变文件的长度,并始终落后于读者,这应该不会给任何问题。事实上,从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);
}
}
现在,因为你使用的是加密的,我甚至会建议在另一个专门的流进行实际的加密。这很好地清理了代码。
class MySpecialHashingStream : Stream
{
...
}
protected void Encrypt(Stream input, Stream output)
{
Stream encryptedOutput = new MySpecialHashingStream(output);
input.CopyTo(encryptedOutput);
}
我觉得这很脏。你为什么这样做?也许你可以解释你的情况? – Matthias 2011-12-28 05:02:38