首先,我想说我已经尝试寻找解决方案,我没有找到一个我不必解压缩,添加我的文件夹,然后再拉链.我没有使用任何第三方库.如果可能的话,我想使用system.io.compression来做这个…如果不是,我会使用dotnetzip作为我的最后手段.
TL;博士.
我希望能够将包含文件的目录添加到已创建的zip文件中.这可以使用system.io.compression库吗?
编辑:
using (FileStream zipToOpen = new FileStream(zipfile, FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
ZipArchiveEntry readmeEntry = archive.CreateEntry("testFolder/");
}
}
所以,使用这段代码我可以在里面创建一个文件夹,但它里面没有任何文件.我现在的问题是我是否必须再次运行此代码才能将我的源文件夹中的每个文件都放到zip文件夹中,或者有更好的方法吗?
解决方法:
由于@stuartd,我设法找到了这样做的方法.他向我指出了这个答案https://*.com/a/22339337/3182972,我找到了一种方法将它实现到我的代码中,该代码从所述目录的源位置创建包含文件的目录.
这是代码:
using (FileStream zipToOpen = new FileStream("c:\MyDestination\test.zip", FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
ZipArchiveEntry readmeEntry;
DirectoryInfo d = new DirectoryInfo(c:\MySourceFolder);
FileInfo[] Files = d.GetFiles("*");
foreach (FileInfo file in Files)
{
readmeEntry = archive.CreateEntryFromFile("c:\MySourceFolder"+ "\\" + file.Name, "MySourceFolder" + "/" + file.Name);
}
}
}
所以我做的是去我的源目录并浏览那里的所有文件,并在foreach循环中将它们添加到zip文件中的目标文件夹中.
您还可以使用以下代码获取源目录名称:
string sourcepath = "C:\MySourceFolder";
int ind = sourcepath.LastIndexOf("\\") + 1;
string folderName = sourcepath.Substring(ind, folder.Length - ind);