Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
Silverlight 使用icsharpziplib压缩字节[](图像)_Silverlight_Silverlight 5.0_Savefiledialog_Sharpziplib - Fatal编程技术网

Silverlight 使用icsharpziplib压缩字节[](图像)

Silverlight 使用icsharpziplib压缩字节[](图像),silverlight,silverlight-5.0,savefiledialog,sharpziplib,Silverlight,Silverlight 5.0,Savefiledialog,Sharpziplib,只有一个图像是byte[]bytes,我正在尝试压缩到Zip以便用户下载,因为我可以看到字节数组保存在MemoryStream中 问题是,当我尝试以这种方式将MemoryStream的缓冲区读取到ImagesAux时zippedMemoryStream.read(ImagesAux,0,1000000)不起作用,但ImagesAux=zippedMemoryStream.ToArray()这样allready就可以工作了。。。然后stream.Write(ImagesAux,0,ImagesAu

只有一个图像是byte[]bytes,我正在尝试压缩到Zip以便用户下载,因为我可以看到字节数组保存在MemoryStream中

问题是,当我尝试以这种方式将MemoryStream的缓冲区读取到ImagesAux时
zippedMemoryStream.read(ImagesAux,0,1000000)不起作用,但
ImagesAux=zippedMemoryStream.ToArray()这样allready就可以工作了。。。然后
stream.Write(ImagesAux,0,ImagesAux.Length)
如果要将ZipFile传递到SaveFileDialog,则无法获得ImagesAux的大小,而不是我看到的内容,ZipFile已创建,但给出了ALZip不支持的格式错误,有人能指出我做错了什么吗

    MemoryStream zippedMemoryStream = new MemoryStream();
    ZipOutputStream zipOutputStream;

    zipOutputStream = new ZipOutputStream(zippedMemoryStream, 1000000);
    zipOutputStream.SetLevel(0);
    zipOutputStream.UseZip64 = UseZip64.On;

    byte[] bytes = new byte[stream.Length];
    stream.Read(bytes, 0, (int)stream.Length);

    ZipEntry entry = new ZipEntry(ZipEntry.CleanName(ImageNameServer));//ImageNameServer
    entry.DateTime = DateTime.Now;
    entry.Comment = "Teste";
    entry.ZipFileIndex = 1;
    entry.Size = bytes.Length;

    zipOutputStream.PutNextEntry(entry);
    zipOutputStream.Write(bytes, 0, bytes.Length);
    var something = zipOutputStream.GetType();
    var lvl = zipOutputStream.GetLevel();
    //zippedMemoryStream.Write(bytes, 0, bytes.Length);
    zippedMemoryStream.Read(buffer, 0, bytes.Length);
    MemoryStream auxxpto = new MemoryStream();
    zippedMemoryStream.WriteTo(auxxpto);
    buffer = auxxpto.ToArray();

    private void DataSetDownload(object sender, RoutedEventArgs e)
    {
        var dialog = new SaveFileDialog();
        dialog.Filter = "Zip Files (*.zip)|*.zip";
        dialog.DefaultExt = "zip";
        dialog.DefaultFileName = "DataSet.zip";

        bool? fileSelected = dialog.ShowDialog();
        byte[] ImagesAux = new byte[1000000];

        if (fileSelected == true)
        {
            var value = zippedMemoryStream.CanWrite;
            var read = zippedMemoryStream.CanRead;
            zippedMemoryStream.Read(ImagesAux, 0, 1000000);
            ImagesAux = zippedMemoryStream.ToArray();
            //ZippedFile.Read(ImagesAux, 0, ImagesAux.Length);
            //ImagesAux = zippedMemoryStream.ToArray();
            zipOutputStream.Finish();
            zipOutputStream.Close();

            using (Stream stream = dialog.OpenFile())
            {
                stream.Write(ImagesAux, 0, ImagesAux.Length);
                //stream = zippedMemoryStream.ToArray();
                //stream.Flush();
                //stream.Close();
            }
        }
    }
此代码已从问题中删除。答案应该在答案中

工作代码

    MemoryStream zippedMemoryStream = new MemoryStream();
    ZipOutputStream zipOutputStream;

    zipOutputStream = new ZipOutputStream(zippedMemoryStream, 1000000);
    zipOutputStream.SetLevel(0);
    zipOutputStream.UseZip64 = UseZip64.On;

    byte[] bytes = new byte[stream.Length];
    stream.Read(bytes, 0, (int)stream.Length);

    ZipEntry entry = new ZipEntry(ZipEntry.CleanName(ImageNameServer));//ImageNameServer

    zipOutputStream.PutNextEntry(entry);
    zipOutputStream.Write(bytes, 0, bytes.Length);
    zipOutputStream.Finish();
    zipOutputStream.CloseEntry();

    private void DataSetDownload(object sender, RoutedEventArgs e)
    {
        var dialog = new SaveFileDialog();
        dialog.Filter = "Zip Files (*.zip)|*.zip";
        dialog.DefaultExt = "zip";
        dialog.DefaultFileName = "DataSet.zip";

        bool? fileSelected = dialog.ShowDialog();
        byte[] ImagesAux = new byte[1000000];

        if (fileSelected == true)
        {
            var value = zippedMemoryStream.CanWrite;
            var read = zippedMemoryStream.CanRead;
            zippedMemoryStream.Position = 0;
            zippedMemoryStream.Read(ImagesAux, 0, 1000000);

            //ZippedFile.Read(ImagesAux, 0, ImagesAux.Length);
            //ImagesAux = zippedMemoryStream.ToArray();
            zipOutputStream.Finish();
            zipOutputStream.Close();

            using (Stream stream = dialog.OpenFile())
            {
                stream.Write(ImagesAux, 0, ImagesAux.Length);
                //stream = zippedMemoryStream.ToArray();
                //stream.Flush();
                //stream.Close();
            }
        }
    }

在读取之前,您似乎没有将zippedMemoryStream的位置更改回0。是的,您是对的,不知道它在该点处于最后一个位置,但知道它何时创建zip。文件以正确的大小显示,但仍然给出不支持的格式错误,但是感谢您的回答,至少更接近正确答案。现在解决了zipOutputStream.Finish();在错误的位置,立即编辑以显示其位置。