繁体   English   中英

从SqlDatabase到ZipFile的C#Byte []和fileName

[英]C# Byte[] and fileName from SqlDatabase to ZipFile

因此,我基本上拥有的是一堆存储在数据库中的文件,我想提取并压缩它们。 我要做的一件事是在内存中完成所有操作。

我也想将其作为电子邮件附件发送。

所以基本上:

  1. 从数据库中收集所有文档
  2. 将这些文档收集到一个内存流/数组中?
  3. 将那些文件压缩到内存中
  4. 通过电子邮件将其作为附件发送。

我已经完成了1和4,但是如何在内存中创建文件数组? 当我尝试从数据库中获取文件时,数据位于byte []中,而文件名则为字符串。

有什么想法吗?

如果我正确理解您的问题,则可能是这样的:

class FileToZip
{
    public string fileName { get; set; }
    public byte[] data { get; set; }
}

接着

var listOfFile = new List<FileToZip>();

要么

var arrayOfFile = new FileToZip[numberOfFiles];

Zip库中应该有说明,说明如何将此信息放入zip文件。

当您将文件作为字节数组(或内存流)获取时,可以使用.NET ZipArchive类将文件写入ZIP文件。

class ZipFile
{
    public string Name { get; set; }
    public byte[] Data { get; set; }
}
...
var files = new List<ZipFile>(); //The files to zip
var zipStream = new MemoryStream(); //Where the zip archive is stored

using (var zipArchive = new ZipArchive(zipStream, ZipArchiveMode.Create))
{
    foreach (var file in files)
    {
        var fileEntry = zipArchive.CreateEntry(file.Name);

        using (var entryStream = fileEntry.Open())
        {
            entryStream.Write(file.Data, 0, file.Data.Length);
        }
    }
}

//You can now send the zip archive as binary data.

您可以使用System.IO.Compression中的ZipArchive类完成此操作。 http://msdn.microsoft.com/zh-CN/library/system.io.compression.ziparchive(v=vs.110).aspx

这是一个例子:

// Test data representing what you pulled from the database in #1
string file1Name = "Hello.txt";
byte[] file1Data = Encoding.UTF8.GetBytes("Hello World");


// Open a new .zip file
using (FileStream stream = new FileStream(@"my.zip", FileMode.Create))
using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Update))
{
    // Add each item to the zip file. Loop this if you have multiple
    ZipArchiveEntry readmeEntry = archive.CreateEntry(file1Name);
    using (BinaryWriter writer = new BinaryWriter(readmeEntry.Open()))
    {
        writer.Write(file1Data);
    }
}

这将创建一个名为my.zip的文件,其中包含一个名为Hello.txt的文件。 My.zip将位于您的输出文件夹中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM