寻找库/类来创建受密码保护的存档

时间:2011-02-22 13:39:04

标签: c# compression

我想要的功能: 1.将文件和文件夹压缩到存档中。 2.密码保护它 3.可以选择排除子目录中的子目录。

我试过了:

dotnetzip: 拥有除排除文件夹的简单方法之外的所有内容。它确实有一种排除文件夹的方法,但我无法解决我遇到的问题(花了半天时间)。想要更简单的东西。

sharpziplib: 没有文档,也无法弄清楚如何使用它。

基本上我想告诉图书馆这样的功能:

zip.AddDIr("c:\opera") 
zip.excludeDir("C:\opera\1\cache")

有这样的lib吗?还是我能做的其他事情?

由于

1 个答案:

答案 0 :(得分:0)

您可以使用System.IO.Compression;你可以选择要压缩的文件;是否创建单个压缩文件;以及是否加密内容;

如果先加密,压缩几乎不会减小任何尺寸。

public static void Compress(FileInfo fi)
        {
            // Get the stream of the source file.
            using (FileStream inFile = fi.OpenRead())
            {
                // Prevent compressing hidden and already compressed files.
                if ((File.GetAttributes(fi.FullName) & FileAttributes.Hidden)
                    != FileAttributes.Hidden & fi.Extension != ".cmp")
                {
                    // Create the compressed file.
                    using (FileStream outFile =
                            File.Create(fi.FullName + ".cmp"))
                    {
                        using (DeflateStream Compress =
                            new DeflateStream(outFile,
                            CompressionMode.Compress))
                        {
                            // Copy the source file into 
                            // the compression stream.
                            byte[] buffer = new byte[4096];
                            int numRead;
                            while ((numRead = inFile.Read(buffer,
                                    0, buffer.Length)) != 0)
                            {
                                Compress.Write(buffer, 0, numRead);
                            }
                            Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
                            fi.Name, fi.Length.ToString(), outFile.Length.ToString());
                        }
                    }
                }
            }
        }

您还可以查看传统的ZIP文件格式压缩: http://www.codeproject.com/KB/recipes/ZipStorer.aspx

您可以在ZipStorer类中使用以下方法直接将其包含在项目中:

private static void CompressFile(string srcFileName, string zipFileName) 
private static void DecompressFile(string zipFileName, string unzipFolder)