gpt4 book ai didi

C# 从流中压缩和压缩 csv

转载 作者:行者123 更新时间:2023-11-30 21:40:36 25 4
gpt4 key购买 nike

我有一个从 DataTable 中提取数据的 MemoryStream。目前,这会馈送到 MailMessage 附件中,并寄出附加到邮件的 csv。我需要做的是压缩和压缩它。

所以现在我正在遍历 DataTable 的每一行,添加适当的逗号,然后将其流式传输。它会生成一个包含数据的 .bin 文件。通过添加一个名称作为附件参数,它将作为有效的 csv 文件发送给客户端。

mail.Attachments.Add(new Attachment(stream, "report.csv"));

任何人都可以帮助我如何在将 csv 添加为附件之前对其进行压缩和压缩吗?最好没有外部库。谢谢。

最佳答案

对于以前的答案,使用这样的模型,

public FileModel(){
public string FileName {get;set;}
public Stream FileStream {get;set;}
}

定义了以下扩展方法来创建要流式传输的 zip 存档。

public static class ZipArchiveExtensions {    
public static Stream Compress(this IEnumerable<FileModel> files) {
if (files.Any()) {
var ms = new MemoryStream();
using(var archive = new ZipArchive(ms, ZipArchiveMode.Create, leaveOpen: true)) {
foreach (var file in files) {
var entry = archive.add(file);
}
}
ms.Position = 0;
return ms;
}
return null;
}

private static ZipArchiveEntry add(this ZipArchive archive, FileModel file) {
var entry = archive.CreateEntry(file.FileName, CompressionLevel.Fastest);
using (var stream = entry.Open()) {
file.FileStream.CopyTo(stream);
}
return entry;
}
}

有了它,您现在可以在将压缩的 csv 文件添加为附件之前添加一个步骤

//...other code

var files = new FileModel[] {
new FileModel {
FileName = "report1.csv",
FileStream = stream
},
new FileModel {
FileName = "report2.xlsx",
FileStream = stream2
}
};

var zipStream = files.Compress();
mail.Attachments.Add(new Attachment(zipStream, "reports.zip"));

//...other code

关于C# 从流中压缩和压缩 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44484786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com