Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
C# .net如何在zipfile中包含目录和文件关系_C#_.net_Zipfile - Fatal编程技术网

C# .net如何在zipfile中包含目录和文件关系

C# .net如何在zipfile中包含目录和文件关系,c#,.net,zipfile,C#,.net,Zipfile,我正在使用System.IO.Compression命名空间ZipFile和ArchiveFile库。为了尽可能地提高效率,我调用了标记为zipping的顶部文件夹。CreateFromDirectory将遍历子文件夹以包含这些文件夹及其文件。但是,我有一些未标记为压缩的子文件夹。更糟糕的是,标记为不压缩的子文件夹包括标记为压缩的子文件夹。据我所知,这些跳过的文件夹不能包含在Zipfile中。这意味着我在zipfile中丢失了文件夹结构。这使得将文件恢复到原始位置变得更加困难 还有其他解决方法吗

我正在使用System.IO.Compression命名空间ZipFile和ArchiveFile库。为了尽可能地提高效率,我调用了标记为zipping的顶部文件夹。CreateFromDirectory将遍历子文件夹以包含这些文件夹及其文件。但是,我有一些未标记为压缩的子文件夹。更糟糕的是,标记为不压缩的子文件夹包括标记为压缩的子文件夹。据我所知,这些跳过的文件夹不能包含在Zipfile中。这意味着我在zipfile中丢失了文件夹结构。这使得将文件恢复到原始位置变得更加困难


还有其他解决方法吗?

您可以使用ZipArchive并手动将文件添加到zip存档中。
entryName
是您所需的
target\folder\filename.ext

using (var zipFileStream = new FileStream(destinationArchiveFileName, FileMode.Create))
{
    using (var archive = new ZipArchive(zipFileStream, ZipArchiveMode.Create))
    {
        for (int i = 0; i < filesToAdd.Count; i++)
        {
            // filter some files before this, or ignore some files here

            var fileName = filesToAdd[i];
            var entryName = entryNames[i];

            archive.CreateEntryFromFile(fileName, entryName, compressionLevel);
        }
    }
}
使用(var zipFileStream=newfilestream(destinationArchiveFileName,FileMode.Create))
{
使用(var archive=new ZipArchive(zipFileStream,ZipArchiveMode.Create))
{
for(int i=0;i

这就是
ZipFile.CreateFromDirectory在循环中内部调用的内容,您可以在此处对其进行过滤。

如果不添加所需子文件夹的父文件夹结构,相信它不会起作用。即使你将一个文件夹标记为不压缩,但要求该文件夹的一个子文件夹处于压缩状态,也没有什么意义