我在将数据从拷贝MemoryStream
到Stream
里面时遇到问题ZipArchive
。以下内容无效-仅返回114个字节:
GetDataAsByteArray(IDataSource dataSource)
{
using (var zipStream = new MemoryStream())
{
using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
{
var file = archive.CreateEntry("compressed.file");
using (var targetStream = file.Open())
{
using (var sourceStream = new MemoryStream())
{
await dataSource.LoadIntoStream(sourceStream);
sourceStream.CopyTo(targetStream);
}
}
}
var result = zipStream.ToArray();
zipStream.Close();
return result;
}
}
但是,使用下面的“复制”过程实现,将所有1103字节写入数组/内存流:
await targetStream.WriteAsync(sourceStream.ToArray(), 0, (int) sourceStream.Length);
我想知道为什么CopyTo
产量更少的字节。我也Int32
对第二种实现中的强制转换感到不安全。
仅供参考:比较字节数组:看起来第一个实现只写了zip文件的页眉和页脚。
Stream.CopyTo()从流的当前Position开始复制。在调用LoadIntoStream()之后,该值可能不为0。由于它是MemoryStream,因此您可以像这样简单地对其进行修复:
await dataSource.LoadIntoStream(sourceStream);
sourceStream.Position = 0;
sourceStream.CopyTo(targetStream);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句