[英]C# Byte[] and fileName from SqlDatabase to ZipFile
因此,我基本上拥有的是一堆存储在数据库中的文件,我想提取并压缩它们。 我要做的一件事是在内存中完成所有操作。
我也想将其作为电子邮件附件发送。
所以基本上:
我已经完成了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.