示例#1
0
    /// <summary>
    /// 压缩文件
    /// /// </summary>
    /// <param name="dir">文件目录</param>
    /// <param name="zipfilename">zip文件名</param>
    public void compressFiles(string[] filenames, string zipfilename)
    {
        //try
        //{

        //    using (ZipOutputStream s = new ZipOutputStream(File.Create(zipfilename)))
        //    {
        //        s.SetLevel(9); // 0 - store only to 9 - means best compression  压缩等级
        //        byte[] buffer = new byte[4096];
        //        foreach (string file in filenames)
        //        {
        //            string elDir = System.IO.Path.GetDirectoryName(file);
        //            string userName = System.Web.Configuration.WebConfigurationManager.AppSettings["el_share_authenticate_username"];
        //            string password = System.Web.Configuration.WebConfigurationManager.AppSettings["el_share_authenticate_password"];
        //            uint r = WNetConnectionHelper.WNetAddConnection(userName, password, elDir, null);
        //            ZipEntry entry = new ZipEntry(Path.GetFileName(file));
        //            entry.DateTime = DateTime.Now;
        //            s.PutNextEntry(entry);
        //            using (FileStream fs = File.OpenRead(file))
        //            {
        //                int sourceBytes;
        //                do
        //                {
        //                    sourceBytes = fs.Read(buffer, 0, buffer.Length);
        //                    s.Write(buffer, 0, sourceBytes);
        //                } while (sourceBytes > 0);
        //            }
        //        }
        //        s.Finish();
        //        s.Close();
        //    }
        //}
        //catch(Exception EX)
        //{

        //}

        System.Drawing.Imaging.ImageCodecInfo    myImageCodecInfo;
        System.Drawing.Imaging.Encoder           myEncoder;
        System.Drawing.Imaging.EncoderParameter  myEncoderParameter;
        System.Drawing.Imaging.EncoderParameters myEncoderParameters;
        // Get an ImageCodecInfo object that represents the JPEG codec.
        myImageCodecInfo = GetEncoderInfo("image/jpeg");
        // Create an Encoder object based on the GUID
        // for the Quality parameter category.
        myEncoder = System.Drawing.Imaging.Encoder.Quality;
        // Create an EncoderParameters object.
        // An EncoderParameters object has an array of EncoderParameter
        // objects. In this case, there is only one
        // EncoderParameter object in the array.
        myEncoderParameters = new System.Drawing.Imaging.EncoderParameters(1);
        // Save the bitmap as a JPEG file with 给定的 quality level
        //压缩等级,0到100,0 最差质量,100 最佳</param>
        myEncoderParameter           = new System.Drawing.Imaging.EncoderParameter(myEncoder, 30L);
        myEncoderParameters.Param[0] = myEncoderParameter;
        try
        {
            using (ZipOutputStream s = new ZipOutputStream(File.Create(zipfilename)))
            {
                s.SetLevel(9);  // 0 - store only to 9 - means best compression  压缩等级
                foreach (string file in filenames)
                {
                    string elDir    = System.IO.Path.GetDirectoryName(file);
                    string userName = System.Web.Configuration.WebConfigurationManager.AppSettings["el_share_authenticate_username"];
                    string password = System.Web.Configuration.WebConfigurationManager.AppSettings["el_share_authenticate_password"];
                    uint   r        = WNetConnectionHelper.WNetAddConnection(userName, password, elDir, null);


                    ZipEntry entry = new ZipEntry(Path.GetFileName(file));
                    entry.DateTime = DateTime.Now;
                    s.PutNextEntry(entry);

                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (System.Drawing.Image img = System.Drawing.Image.FromFile(file))
                        {
                            img.Save(ms, myImageCodecInfo, myEncoderParameters);
                            byte[] buffer          = ms.GetBuffer();
                            long   byteLength      = buffer.Length;
                            long   leftByterLength = byteLength;
                            int    startIndex      = 0;
                            int    wirteByteLength = 0;
                            while (leftByterLength > 0)
                            {
                                wirteByteLength = leftByterLength >= 4096 ? 4096 : (int)leftByterLength;
                                s.Write(buffer, startIndex, wirteByteLength);
                                leftByterLength = leftByterLength - wirteByteLength;
                                startIndex      = startIndex + wirteByteLength;
                            }
                        }
                    }
                    WNetConnectionHelper.WNetCancelConnection(userName, 1, true);
                }
                s.Finish();
                s.Close();
            }
        }
        catch (Exception EX)
        {
        }
    }
示例#2
0
    /// <summary>
    /// 压缩文件
    /// /// </summary>
    /// <param name="dir">文件目录</param>
    /// <param name="zipfilename">zip文件名</param>
    public void compressFiles(string[] filenames, string zipfilename)
    {
        System.Drawing.Imaging.ImageCodecInfo    myImageCodecInfo;
        System.Drawing.Imaging.Encoder           myEncoder;
        System.Drawing.Imaging.EncoderParameter  myEncoderParameter;
        System.Drawing.Imaging.EncoderParameters myEncoderParameters;
        // Get an ImageCodecInfo object that represents the JPEG codec.

        myImageCodecInfo = GetEncoderInfo("image/jpeg");
        // Create an Encoder object based on the GUID
        // for the Quality parameter category.
        myEncoder = System.Drawing.Imaging.Encoder.Quality;
        // Create an EncoderParameters object.
        // An EncoderParameters object has an array of EncoderParameter
        // objects. In this case, there is only one
        // EncoderParameter object in the array.
        myEncoderParameters = new System.Drawing.Imaging.EncoderParameters(1);
        // Save the bitmap as a JPEG file with 给定的 quality level
        //压缩等级,0到100,0 最差质量,100 最佳</param>

        myEncoderParameters          = new System.Drawing.Imaging.EncoderParameters(1);
        myEncoderParameter           = new System.Drawing.Imaging.EncoderParameter(myEncoder, 30L);
        myEncoderParameters.Param[0] = myEncoderParameter;

        try
        {
            using (ZipOutputStream s = new ZipOutputStream(File.Create(zipfilename)))
            {
                s.SetLevel(9); // 0 - store only to 9 - means best compression  压缩等级
                foreach (string file in filenames)
                {
                    string elDir    = System.IO.Path.GetDirectoryName(file);
                    string userName = System.Web.Configuration.WebConfigurationManager.AppSettings["el_share_authenticate_username"];
                    string password = System.Web.Configuration.WebConfigurationManager.AppSettings["el_share_authenticate_password"];
                    uint   r        = WNetConnectionHelper.WNetAddConnection(userName, password, elDir, null);


                    ZipEntry entry = new ZipEntry(Path.GetFileName(file));
                    entry.DateTime = DateTime.Now;
                    s.PutNextEntry(entry);

                    //byte[] file1 = File.ReadAllBytes(file);
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (System.Drawing.Image img = System.Drawing.Image.FromFile(file))
                        {
                            byte[] buffer = new byte[1];


                            if (CheckBox1.Checked == false)
                            {
                                img.Save(ms, myImageCodecInfo, myEncoderParameters);
                                buffer = ms.GetBuffer();
                            }
                            else if (CheckBox1.Checked == true)
                            {
                                FileInfo MyFileInfo = new FileInfo(file);
                                float    MyFileSize = (float)MyFileInfo.Length / 1024;
                                if (MyFileSize <= 650)
                                {
                                    buffer = File.ReadAllBytes(file);
                                }
                                else if (MyFileSize > 650 && MyFileSize < 900)
                                {
                                    int param = Convert.ToInt32(75 + 600 / MyFileSize * 22);
                                    buffer = getThumImage(file, param).ToArray();
                                }
                                else if (MyFileSize > 900 && MyFileSize < 1100)
                                {
                                    int param = Convert.ToInt32(75 + 600 / MyFileSize * 20);
                                    buffer = getThumImage(file, param).ToArray();
                                }
                                else if (1100 < MyFileSize && MyFileSize < 1200)
                                {
                                    buffer = File.ReadAllBytes(file);
                                }
                                else if (1200 < MyFileSize && MyFileSize < 1400)
                                {
                                    int param = Convert.ToInt32(70 + 600 / MyFileSize * 20);
                                    buffer = getThumImage(file, param).ToArray();
                                }
                                else if (MyFileSize > 1400 && MyFileSize < 1900)
                                {
                                    int param = Convert.ToInt32(1900 / MyFileSize * 15);
                                    buffer = getThumImage(file, param).ToArray();
                                }
                                else if (MyFileSize > 1900)
                                {
                                    int param = Convert.ToInt32(10 + 1900 / MyFileSize * 10);
                                    buffer = getThumImage(file, param).ToArray();
                                }
                            }

                            long byteLength      = buffer.Length;
                            long leftByterLength = byteLength;
                            int  startIndex      = 0;
                            int  wirteByteLength = 0;
                            while (leftByterLength > 0)
                            {
                                wirteByteLength = leftByterLength >= 4096 ? 4096 : (int)leftByterLength;
                                s.Write(buffer, startIndex, wirteByteLength);
                                leftByterLength = leftByterLength - wirteByteLength;
                                startIndex      = startIndex + wirteByteLength;
                            }
                        }
                        #region
                        //using (System.Drawing.Image img = System.Drawing.Image.FromFile(file))
                        //{
                        //    FileInfo MyFileInfo = new FileInfo(file);
                        //    float MyFileSize = (float)MyFileInfo.Length / 1024;
                        //    if (MyFileSize <= 650)
                        //    {
                        //        img.Save(ms, ImageFormat.Jpeg);
                        //    }
                        //    else if (MyFileSize > 650)
                        //    {
                        //        img.Save(ms, ImageFormat.Jpeg);
                        //    }
                        //    //img.Save(ms, myImageCodecInfo, myEncoderParameters);
                        //    byte[] buffer = ms.GetBuffer();
                        //    long byteLength = buffer.Length;
                        //    long leftByterLength = byteLength;
                        //    int startIndex = 0;
                        //    int wirteByteLength = 0;
                        //    while (leftByterLength > 0)
                        //    {
                        //        wirteByteLength = leftByterLength >= 4096 ? 4096 : (int)leftByterLength;
                        //        s.Write(buffer, startIndex, wirteByteLength);
                        //        leftByterLength = leftByterLength - wirteByteLength;
                        //        startIndex = startIndex + wirteByteLength;
                        //    }
                        //}
                        #endregion
                    }

                    WNetConnectionHelper.WNetCancelConnection(userName, 1, true);
                }

                s.Finish();
                s.Close();
            }
        }

        catch (Exception EX)
        {
        }
    }