C# 带有专用子文件夹的zip目录

C# 带有专用子文件夹的zip目录,c#,dotnetzip,C#,Dotnetzip,我正在尝试将文件夹目录打包到zip目录中,不包括所有子文件夹 目前我正在使用此方法打包整个目录 public void directoryPacker(DirectoryInfo directoryInfo) { string pathToRootDirectory = Path.Combine(directoryInfo.Parent.FullName, directoryInfo.Name) + ".abc"; //name

我正在尝试将文件夹目录打包到zip目录中,不包括所有子文件夹

目前我正在使用此方法打包整个目录

public void directoryPacker(DirectoryInfo directoryInfo)
{
   string pathToRootDirectory = Path.Combine(directoryInfo.Parent.FullName,
                               directoryInfo.Name) + ".abc"; //name of root file
   using(ZipContainer zip = new ZipContainer(pass)) 
   //ZipContainer inherits from Ionic.Zip.ZipFile
   {
       //some password stuff here
       //
       //zipping
       zip.AddDirectory(directoryInfo.FullName, "/"); //add complete subdirectory to *.abc archive (zip archive)
       File.Delete(pathToRootDirectory);
       zip.Save(pathToRootDirecotry); //save in rootname.bdd
   }
}
这真的很棒,但现在我有一个

 List<string> paths 
列出路径
在我想要放在zipArchive中的子文件夹的路径中。其他子文件夹(不在列表中)不应在存档中


谢谢

我找不到任何以非递归方式添加文件夹的内置函数。因此,我编写了一个手动添加它们的函数:

public void directoryPacker(DirectoryInfo directoryInfo)
{
    // The list of all subdirectory relatively to the rootDirectory, that should get zipped too
    var subPathsToInclude = new List<string>() { "subdir1", "subdir2", @"subdir2\subsubdir" };

    string pathToRootDirectory = Path.Combine(directoryInfo.Parent.FullName,
                                directoryInfo.Name) + ".abc"; //name of root file
    using (ZipContainer zip = new ZipContainer(pass))
    //ZipContainer inherits from Ionic.Zip.ZipFile
    {
        // Add contents of root directory
        addDirectoryContentToZip(zip, "/", directoryInfo.FullName);

        // Add all subdirectories that are inside the list "subPathsToInclude"
        foreach (var subPathToInclude in subPathsToInclude)
        {
            var directoryPath = Path.Combine(new[] { directoryInfo.FullName, subPathToInclude });
            if (Directory.Exists(directoryPath))
            {
                addDirectoryContentToZip(zip, subPathToInclude.Replace("\\", "/"), directoryPath);
            }
        }


        if (File.Exists(pathToRootDirectory))
            File.Delete(pathToRootDirectory);

        zip.Save(pathToRootDirecotry); //save in rootname.bdd
    }
}

private void addDirectoryContentToZip(ZipContainer zip, string zipPath, DirectoryInfo directoryPath)
{
    zip.AddDirectoryByName(zipPath);
    foreach (var file in directoryPath.GetFiles())
    {
        zip.AddFile(file, zipPath + "/" + Path.GetFileName(file.FullName));
    }
}
public void directoryPacker(DirectoryInfo DirectoryInfo)
{
//与rootDirectory相关的所有子目录的列表,也应该被压缩
var subPathsToInclude=new List(){“subdir1”,“subdir2”,“@“subdir2\subsubdir”};
字符串pathToRootDirectory=Path.Combine(directoryInfo.Parent.FullName,
directoryInfo.Name)+“.abc”//根文件的名称
使用(ZipContainer zip=新ZipContainer(pass))
//ZipContainer继承自Ionic.Zip.ZipFile
{
//添加根目录的内容
addDirectoryContentToZip(zip,“/”,directoryInfo.FullName);
//添加列表“subPathsToInclude”中的所有子目录
foreach(变量子路径包含在子路径中)
{
var directoryPath=Path.Combine(新[]{directoryInfo.FullName,subPathToInclude});
if(Directory.Exists(directoryPath))
{
addDirectoryContentToZip(zip,子路径包括。替换(“\\”,“/”,directoryPath);
}
}
if(File.Exists(pathToRootDirectory))
文件.Delete(pathToRootDirectory);
zip.Save(pathtorootdirectry);//保存在rootname.bdd中
}
}
私有void addDirectoryContentToZip(ZipContainer-zip、字符串zipPath、DirectoryInfo-directoryPath)
{
AddDirectoryByName(zipPath);
foreach(directoryPath.GetFiles()中的var文件)
{
zip.AddFile(文件,zipPath+“/”+Path.GetFileName(file.FullName));
}
}

我没有测试它,你能告诉我这是否对你有效吗?

为什么不在你的路径上创建一个foreach循环,并为每个路径调用
directoryPacker()
?因为我在directoryPacker()中做了其他事情对于childfolders,不需要这样做…仅对于根目录,您是否为childfolders和rootfolders提供了单独的函数?不,我想我可以用一个函数来解决它。那么,您可以发布directoryPacker()的完整代码吗?没有它你很难弄清楚你在做什么