例如,如果我有一个名为2016的文件夹,并且该文件夹中有文件夹Jan-Dec和其他文件,有没有办法将这些文件夹压缩成2016.zip?我尝试过的任何东西都会将文件夹中的所有文件压缩在一起,但是我想将文件夹和文件夹中没有其他文件压缩在一起。
基本上,在2016.zip中有2016.zip和Jan-Dec文件夹,每个文件夹都有各自的文件,而不是zip文件夹中的空文件夹。
以下代码从00开始抓取FILES,但不抓取文件夹。
// Where the files are located
string strStartPath = txtTargetFolder.Text;
// Where the zip file will be placed
string strZipPath = @"C:\Users\smelmo\Desktop\testFinish\" + strFileNameRoot + "_" + txtDateRange1.Text.Replace(@"/", "_") + "_" + txtDateRange2.Text.Replace(@"/", "_") + ".zip";
if(File.Exists(strZipPath))
{
File.Delete(strZipPath);
}
using (ZipArchive archive = ZipFile.Open(strZipPath, ZipArchiveMode.Create))
{
foreach (FileInfo file in new DirectoryInfo(strStartPath).GetFiles())
{
if (file.Name.StartsWith("00"))
{
var entry = archive.CreateEntryFromFile(Path.Combine(file.Directory.ToString(), file.Name), file.Name);
}
}
}
我也尝试使用typeof()
,但它没有抓取文件夹或任何东西。
using (ZipArchive archive = ZipFile.Open(strZipPath, ZipArchiveMode.Create))
{
foreach (FileInfo file in new DirectoryInfo(strStartPath).GetFiles())
{
Type t = file.GetType();
if (t.Equals(typeof(Directory)))
{
var entry = archive.CreateEntryFromFile(Path.Combine(file.Directory.ToString(), file.Name), file.Name);
}
}
编辑:为了清晰起见添加了细节
答案 0 :(得分:2)
使用以下文件夹结构:
此代码(已更新):
using System.IO;
using System.IO.Compression;
class Program
{
static void Main(string[] args)
{
string sourceFolder = @"c:\temp";
string zipFilePath = Path.Combine(sourceFolder, "test.zip");
// TODO: Check if the archive exists maybe?
using (ZipArchive archive = ZipFile.Open(zipFilePath, ZipArchiveMode.Create))
{
foreach (var directoryName in Directory.GetDirectories(sourceFolder))
{
foreach (var filePath in Directory.GetFiles(directoryName))
{
var dirInfo = new DirectoryInfo(directoryName);
var fileName = Path.GetFileName(filePath);
var entry = archive.CreateEntry($"{dirInfo.Name}\\{fileName}");
}
}
}
}
}
生成此zip: