0

可能重复:
如何在 C# 中压缩文件,不使用第 3 方 API?

我有一个创建两个文件的应用程序,一个是 txt,另一个是图像文件。我想将它们压缩在一起,然后使用计算机的默认电子邮件设置发送。我需要压缩它们的原因是因为我使用的是邮件到链接方法。这是代码:

public static void Main()
{
    SendMailWithMailTo(
        "dvader@deathstar.mil",
        "Rebel Base Detected",
        "Hoth, baybee!!",
        "\"C:\\Users\\Fett\\RebelBase[1].png\""); 
}

所以我只能附上一个文件。所以我认为拉链可能是个好主意?我也在使用.NET 4.0。我相信 .NET 4.5 中有一些内置程序集,但我的应用程序要求是 .NET 4.o。如果可能的话,我也不想使用任何外部工具。

4

3 回答 3

3

Png 已经被压缩了,所以再次压缩它不会有太多好处。为什么不简单地使用 System.Net.Mail.Attachment。在我提供的链接上有一个很好的例子说明如何做到这一点

于 2012-09-11T15:22:17.363 回答
2

.NET 4.5 包括一个ZipArchive允许轻松压缩多个文件的新类。

此 MSDN 条目有一些示例

但正如已经提到的,一些常见的图像格式已经被压缩,假设它们的大小是平庸的,你可能不会在文本文件上节省太多。

如果您坚持使用 4.0,那么重复问题的建议ZipPackage是创建 zip 存档的一种选择(尽管它支持的格式似乎有一些警告)。

.NET 中的压缩流将创建可以由 zip 客户端解压缩的文件,但它本身不支持创建多文件存档,所以如果ZipPackage不适合你,我猜答案是:不,你'将需要第三方库或创建您自己的 zip 标准实现。

对我来说,最简单的方法似乎是不打扰压缩并将文件直接添加到电子邮件中,但这是一个不知道平均文件大小或压缩收益的建议。

于 2012-09-11T15:27:49.610 回答
1

如果您试图让操作系统启动默认邮件客户端,以便用户可以构建电子邮件(这就是您所追求的),您应该考虑MapiMailMessage改用。这是一篇详细介绍它的文章。

它是一个第三方库,因为使用 Windows API 并不直接,因此涉及到相当多的代码,但我敦促您意识到开源的第三方库没有任何问题。事实上,这是一篇包含所有源代码的文章以及如何使用它的示例。

我为什么推荐这个?因为它本机支持多个附件,您可以不必担心压缩它们(尤其是 PNG 文件,因为这里已经说明了另一个贡献者,它们已经非常压缩)。

于 2012-09-11T15:55:25.090 回答