Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用dat文件和txt文件生成zip#_C#_Algorithm_Download_Zip - Fatal编程技术网

C# 如何使用dat文件和txt文件生成zip#

C# 如何使用dat文件和txt文件生成zip#,c#,algorithm,download,zip,C#,Algorithm,Download,Zip,我需要创建一个txt文件和一个扩展名为dat的文件。之后,我想将这些文件压缩成zip文件并下载 我的问题是我不想在下载之前保存文件。那么,我可以在不在服务器上创建文件的情况下创建和下载zip吗?我假设您正在使用ASP.Net 您可以将文件内容(流等)放入字节数组中,然后在响应中直接输出给用户,如: string fileType = "...zip..."; byte[] fileContent = <your file content> as byte[]; int fileSiz

我需要创建一个txt文件和一个扩展名为dat的文件。之后,我想将这些文件压缩成zip文件并下载


我的问题是我不想在下载之前保存文件。那么,我可以在不在服务器上创建文件的情况下创建和下载zip吗?

我假设您正在使用ASP.Net

您可以将文件内容(流等)放入字节数组中,然后在响应中直接输出给用户,如:

string fileType = "...zip...";
byte[] fileContent = <your file content> as byte[];
int fileSize = 1000;
string fileName = "filename.zip";

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
Response.ContentType = fileType;
Response.OutputStream.Write(fileContent, 0, fileSize);
string fileType=“…zip…”;
字节[]文件内容=作为字节[];
int fileSize=1000;
字符串fileName=“fileName.zip”;
AddHeader(“内容处置”、“附件;文件名=\”“+文件名+”\”);
Response.ContentType=文件类型;
Response.OutputStream.Write(fileContent,0,fileSize);

我使用了内存流。您可以在下面找到代码:

public ZipOutputStream CreateZip(MemoryStream memoryStreamControlFile, MemoryStream memoryStreamDataFile)
{
    using (var outputMemStream = new MemoryStream())
    {
        using (var zipStream = new ZipOutputStream(baseOutputStream))
        {
            zipStream.SetLevel(3); // 0-9, 9 being the highest level of compression
            byte[] bytes = null;

            // .dat
            var nameFileData = CreateFileName("dat");
            var newEntry = new ZipEntry(nameFileData) { DateTime = DateTime.Now };

            zipStream.PutNextEntry(newEntry);

            bytes = memoryStreamDataFile.ToArray();

            var inStream = new MemoryStream(bytes);
            StreamUtils.Copy(inStream, zipStream, new byte[4096]);
            inStream.Close();
            zipStream.CloseEntry();

            // .suc

            var nameFileControl = CreateFileName("suc");
            newEntry = new ZipEntry(nameFileControl) { DateTime = DateTime.Now };

            zipStream.PutNextEntry(newEntry);

            bytes = memoryStreamControlFile.ToArray();

            inStream = new MemoryStream(bytes);
            StreamUtils.Copy(inStream, zipStream, new byte[4096]);
            inStream.Close();
            zipStream.CloseEntry();

            // .zip

            zipStream.IsStreamOwner = false;
            zipStream.Close();

            outputMemStream.Position = 0;

            return zipStream;
        }
    }
}

我以前使用过这个类来压缩c#中的内容。您所追求的是所谓的流式支持。试试看。将文件扩展名设置为“zip”会使文件压缩吗?!!当然不是,我只是提供了流式处理“最终文件”的方法,假设OP已经压缩了它。