我试图在C#中创建一个Zip Archive,其中的数据是在内存中创建的。然而,每次我试图最终将存档保存到磁盘时,它都是空的。现在我正在测试一个文件,但它最终将成为一个将被存档的文件列表。
var data = new Data
{
FirstName = "FirstName",
LastName = "LastName"
};
var json = JsonConvert.SerializeObject(data, Formatting.Indented);
var bytes = Encoding.UTF8.GetBytes(json);
using var file = new MemoryStream(bytes);
using var archiveStream = new MemoryStream();
var archive = new ZipArchive(archiveStream, ZipArchiveMode.Create, true);
var archiveEntry = archive.CreateEntry("data.json", CompressionLevel.Fastest);
using var entryStream = archiveEntry.Open();
file.CopyTo(entryStream);
using var fileStream = new FileStream("/Path/To/File/test.zip", FileMode.Create, FileAccess.Write);
archiveStream.CopyTo(fileStream);
字符串
我错过了什么?
2条答案
按热度按时间bq9c1y661#
正如在https://stackoverflow.com/a/17939367/14918126中提到的,问题是
archiveStream
需要在使用它之前进行处理。在将其复制到fileStream之前,您应该将archiveStream
的位置设置为开始。下面的解决方案应该可以工作:字符串
q5lcpyga2#
一旦写入内存流,您需要返回到内存流的开头。
字符串