これは完全に可能であり、望ましいことです。書き込み方法がファイルの長さを変更せず、常に読者の後ろにある場合、これは何の問題もないはずです。実際、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