0

我有一个 MemoryStream 代表一个 zip 文件。这是创建流的方式:

var zipMemoryStream = new MemoryStream();
using (var zipPackage = Package.Open(zipMemoryStream, FileMode.CreateNew))
{
    foreach (var file in files)
    {
        var c = new Uri("/" + file.FileName + extension, UriKind.Relative);
        var zipPart = zipPackage.CreatePart(c, fileType);

        if (zipPart == null)
            continue;

        CopyStream(file.MemoryStream, zipPart.GetStream());
    }
}

File.WriteAllBytes("C:\\ZipTest.zip", zipMemoryStream.ToArray());

try
{
    mailMsg.Attachments.Add(new Attachment(zipMemoryStream, "ZipTest.zip",
                            MediaTypeNames.Application.Zip));
}

如您所见,我添加了 File.WriteAllBytes 行,它将流保存到我的 HDD(用于测试)。

如果 zip 中的文件为空,则保存在 HDD 上的文件完美无缺,重量约为 138B。

但是,我在邮件中收到的附件重量为 0B。

知道为什么附件重 0B 吗?

4

1 回答 1

1

是的,在大多数情况下,流的位置在流的末尾。

尝试

try
{
    zipMemoryStream.Position = 0;
    mailMsg.Attachments.Add(new Attachment(zipMemoryStream, "ZipTest.zip",
                            MediaTypeNames.Application.Zip));
}
于 2012-04-12T18:06:32.510 回答