我很确定这不是复制品,请稍等片刻。
如何在不使用任何第三方库的情况下以编程方式(C#)压缩文件(在Windows中)?我需要一个本地的windows调用或类似的东西;我真的不喜欢启动一个进程的想法,但如果真的有必要的话,我会这样做的。PInovke调用会更好。
如果做不到这一点,让我告诉您我真正想要实现的目标:我需要能够让用户在单个请求中下载一组文档。对于如何实现这一点有什么想法吗?
发布于 2009-06-02 16:46:50
您使用的是.NET 3.5吗?您可以使用ZipPackage
类和相关类。它不仅仅是压缩一个文件列表,因为它想为你添加的每个文件提供一个MIME类型。它可能会做你想做的事。
我目前正在使用这些类来解决类似的问题,将几个相关的文件归档到一个单独的文件中以供下载。我们使用文件扩展名将下载文件与我们的桌面应用程序相关联。我们遇到的一个小问题是,不可能只使用像7-zip这样的第三方工具来创建zip文件,因为客户端代码无法打开它-- ZipPackage添加了一个描述每个组件文件内容类型的隐藏文件,如果缺少内容类型文件,则无法打开zip文件。
发布于 2015-04-21 09:59:57
private static string CompressFile(string sourceFileName)
{
using (ZipArchive archive = ZipFile.Open(Path.ChangeExtension(sourceFileName, ".zip"), ZipArchiveMode.Create))
{
archive.CreateEntryFromFile(sourceFileName, Path.GetFileName(sourceFileName));
}
return Path.ChangeExtension(sourceFileName, ".zip");
}
发布于 2014-10-08 19:42:09
根据Simon McKenzie的答案to this question,我建议使用如下两种方法:
public static void ZipFolder(string sourceFolder, string zipFile)
{
if (!System.IO.Directory.Exists(sourceFolder))
throw new ArgumentException("sourceDirectory");
byte[] zipHeader = new byte[] { 80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
using (System.IO.FileStream fs = System.IO.File.Create(zipFile))
{
fs.Write(zipHeader, 0, zipHeader.Length);
}
dynamic shellApplication = Activator.CreateInstance(Type.GetTypeFromProgID("Shell.Application"));
dynamic source = shellApplication.NameSpace(sourceFolder);
dynamic destination = shellApplication.NameSpace(zipFile);
destination.CopyHere(source.Items(), 20);
}
public static void UnzipFile(string zipFile, string targetFolder)
{
if (!System.IO.Directory.Exists(targetFolder))
System.IO.Directory.CreateDirectory(targetFolder);
dynamic shellApplication = Activator.CreateInstance(Type.GetTypeFromProgID("Shell.Application"));
dynamic compressedFolderContents = shellApplication.NameSpace(zipFile).Items;
dynamic destinationFolder = shellApplication.NameSpace(targetFolder);
destinationFolder.CopyHere(compressedFolderContents);
}
}
https://stackoverflow.com/questions/940582
复制相似问题