我正在尝试将所有文件夹及其内容压缩到一个zip文件中。根据我的研究(通过StackOverflow和Microsoft),Directory.CreateDirectory(Path)应该创建给定的目录。但是,我的ZipFile显示为空。
例如,我有一个文件夹(C:\ Users \ smelmo \ Desktop \ test),其中包含子文件夹(0001,0002)。 0001和0002之内是其他文件。我想在测试文件夹中一起压缩0001和0002。这就是我到目前为止所做的:
// Open the directory of the target folder
using (ZipArchive archive = ZipFile.Open(strZipPath, ZipArchiveMode.Create))
{
// Grab each directory within the target folder
foreach (var directoryName in Directory.GetDirectories(strStartPath))
{
// Add each directory to the ZipFile
Directory.CreateDirectory(directoryName);
}
}
这不会产生任何结果。但是,我还有一些代码可以抓取子文件夹中的所有文件并将它们放在ZipFile中。
// Open the directory of the target folder
using (ZipArchive archive = ZipFile.Open(strZipPath, ZipArchiveMode.Create))
{
// Grab each directory within the target folder
foreach (var directoryName in Directory.GetDirectories(strStartPath))
{
//Grab all files in each directory
foreach (var filePath in Directory.GetFiles(directoryName))
{
var fileName = Path.GetFileName(@filePath);
// Place each directory and its repsective files in the zip file
var entry = archive.CreateEntryFromFile(filePath, fileName);
}
}
}
但这并没有将子文件夹0001和0002放在其中,只包含0001和0002的内容。我想要0001和0002及其各自的内容。
答案 0 :(得分:1)
<强>编辑:强>
如果您正在寻找更多控件,您可以创建一个将文件添加到zip存档的功能。然后,您可以使用递归来添加任何子文件夹和文件。
首先,您可以定义一个接受zip存档的函数,以便将文件添加到:
public void AddFolderToZip(ZipArchive archive, string rootPath, string path, bool recursive)
{
foreach (var filePath in Directory.GetFiles(path))
{
//Remove root path portion from file path, so entry is relative to root
string entryName = filePath.Replace(rootPath, "");
entryName = entryName.StartsWith("\\") ? entryName.Substring(1) : entryName;
var entry = archive.CreateEntryFromFile(filePath, entryName);
}
if (recursive)
{
foreach (var subPath in Directory.GetDirectories(path))
{
AddFolderToZip(archive, rootPath, subPath, recursive);
}
}
}
然后您可以使用以下代码调用它:
string strStartPath = @"C:\Test\zip";
string strZipPath = @"C:\Test\output.zip";
ZipArchive archive = ZipFile.Open(strZipPath, ZipArchiveMode.Create);
bool recursive = true;
foreach (var directoryPath in Directory.GetDirectories(strStartPath))
{
AddFolderToZip(archive, strStartPath, directoryPath, recursive);
}
archive.Dispose();
此代码将它找到的每个目录添加到顶级目录中。对于它找到的每个目录,它将使用递归来添加在这些目录中找到的任何子目录或文件。