완벽하게 가능하고 원하는 기술입니다. 쓰기 방법이 파일의 길이를 변경하지 않고 항상 독자 뒤에 있기 때문에 문제가 발생하지 않습니다. 사실, 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