我有一种压缩和加密流的方法。
private static void CompressThenEncrypt(string inputFileName, ICryptoTransform encryptor)
{
using (var inputFileStream = new FileStream(inputFileName, FileMode.Open, FileAccess.ReadWrite))
using (var cryptoStream = new CryptoStream(inputFileStream, encryptor, CryptoStreamMode.Write))
using (var zipStream = new GZipStream(cryptoStream, CompressionMode.Compress))
{
inputFileStream.CopyTo(zipStream);
}
}
哪种方法有效,但它会将压缩和加密的数据附加到该文件中的原始数据。
所以如果我的文件包含:
kkk
然后在压缩和加密之后它确实看起来像这样:
kkkㆆ鬁⠕⟶ꏙᇚ셑襜㷡ꕢ束㺝娥☪
有人知道如何覆盖新数据吗?
答案 0 :(得分:2)
我建议:
答案 1 :(得分:0)
写入临时MemoryStream。类似的东西:
private static void CompressThenEncrypt(string inputFileName, ICryptoTransform encryptor)
{
using (var fileStream = new FileStream(inputFileName,FileMode.Open, FileAccess.ReadWrite))
using (var memoryStream = new MemoryStream())
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
using (var zipStream = new GZipStream(cryptoStream, CompressionMode.Compress))
{
fileStream.CopyTo(zipStream);
cryptoStream.FlushFinalBlock();
fileStream.SetLength(0);
memoryStream.Position = 0;
memoryStream.CopyTo(fileStream);
}
}
我认为这应该起作用,从我的头脑。不确定你是否需要设置长度,我不确定你是否可以不重置MemoryStream的位置。我还没有测试过这段代码。如果您担心内存使用情况,可以随时缓冲使用情况,但这需要更复杂的代码。