1

ICSharplibを使用してフォルダを圧縮する方法。圧縮中に暗号化パスワードを追加する方法はありますか?他のdllを使用できるオプションはありません。ICSharplibのみを使用する必要があります。

現在、このコードブロックを使用しています

private static void CompressFiles(string folderPath) {
    string zipOutput = @"C:\temp\myoutput.zip";
    try {
        using (ZipOutputStream zs = new ZipOutputStream(File.Create(zipOutput))) {
            zs.SetLevel(9); // 0-9 (9 being best compression)
            foreach (string file in Directory.GetFiles(folderPath)) {
                ZipEntry entry = new ZipEntry(Path.GetFileName(file));
                entry.DateTime = DateTime.Now;
                using (FileStream fs = File.OpenRead(file)) {
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    entry.Size = buffer.Length; // This is very important
                    zs.PutNextEntry(entry);
                    zs.Write(buffer, 0, buffer.Length);
                }
            }
            zs.Finish();
            zs.Close();
        }
    }
    catch { throw; }
}

フォルダ内のすべてのファイルを圧縮できます。

しかし、私が欲しいのは、フォルダー全体を圧縮することです。横にあるフォルダと同様に、そのフォルダもzipファイルに含まれています。

前もって感謝します

4

2 に答える 2

3

オブジェクトを使用しFastZipます。

ICSharpCode.SharpZipLib.Zip.FastZip z = new ICSharpCode.SharpZipLib.Zip.FastZip();
z.CreateEmptyDirectories = true;
z.CreateZip("F:\\ZipTest.zip", "F:\\ZipTest\\", true, ""); 

if (File.Exists("F:\\ZipTest.zip"))
    Console.WriteLine("Done");
else
    Console.WriteLine("Failed");
于 2012-08-24T06:48:24.027 に答える
1

次のコードを使用します。

public static bool ZipIt(string sourcePath, string destinationPath)
        {          
            List<string> ListOfFiles = GetListOfFiles(sourcePath);
            try
            {
                string OutPath = destinationPath + ".zip";               
                int TrimLength = (Directory.GetParent(sourcePath)).ToString().Length;
                TrimLength += 1;
                //remove '\'
               FileStream ostream;
                byte[] obuffer;               
                ZipOutputStream oZipStream = new  ZipOutputStream(System.IO.File.Create(OutPath));                    
                oZipStream.Password = EncodePassword("Password");
                oZipStream.SetLevel(9);
                // 9 = maximum compression level
                ZipEntry oZipEntry;
                foreach (string Fil in ListOfFiles.ToArray()) // for each file, generate a zipentry
                {
                    oZipEntry = new ZipEntry(Fil.Remove(0, TrimLength));    
                    oZipStream.PutNextEntry(oZipEntry);    

                    if (!Fil.EndsWith(@"/")) // if a file ends with '/' its a directory
                    {
                        ostream = File.OpenRead(Fil);    
                        obuffer = new byte[ostream.Length];
                        ostream.Read(obuffer, 0, obuffer.Length);    
                        oZipStream.Write(obuffer, 0, obuffer.Length);    
                        ostream.Close();    
                    }
                }
                oZipStream.Finish();
                oZipStream.Close();               
                return true;
            }
            catch (Exception ex)           
            {    
                return false;
            }
        }            

         public static string EncodePassword(string originalPassword)
         {                         
            Byte[] encodedBytes;  
            encodedBytes = ASCIIEncoding.Default.GetBytes(originalPassword);              
            return BitConverter.ToString(encodedBytes);
         }
于 2012-08-24T07:38:21.703 に答える