Est*_*aya 167 c# compression zip download
我很确定这不是重复的,所以请耐心等待一分钟.
如何在不使用任何第三方库的情况下以编程方式(C#)压缩文件(在Windows中)?我需要一个原生的Windows调用或类似的东西; 我真的不喜欢开始一个过程的想法,但如果我绝对不得不这样做.PInovke呼叫会好得多.
如果做不到这一点,让我告诉你我真正想要实现的目标:我需要能够让用户在一个请求中下载一组文档.有关如何实现这一目标的任何想法?
Gal*_*llo 289
如何在不使用任何第三方库的情况下以编程方式(C#)压缩文件(在Windows中)?
如果使用4.5+ Framework,现在有ZipArchive和ZipFile类.
using (ZipArchive zip = ZipFile.Open("test.zip", ZipArchiveMode.Create))
{
zip.CreateEntryFromFile(@"c:\something.txt", "data/path/something.txt");
}
Run Code Online (Sandbox Code Playgroud)
您需要添加对以下内容的引用:
对于.NET Core定位net46,您需要为其添加依赖项
示例project.json:
"dependencies": {
"System.IO.Compression": "4.1.0",
"System.IO.Compression.ZipFile": "4.0.1"
},
"frameworks": {
"net46": {}
}
Run Code Online (Sandbox Code Playgroud)
对于.NET Core 2.0,只需添加一个简单的using语句即可:
Bri*_*ink 85
你在使用.NET 3.5吗?您可以使用ZipPackage类和相关类.它不仅仅是压缩文件列表,因为它需要为您添加的每个文件添加MIME类型.它可能会做你想要的.
我目前正在使用这些类来解决类似的问题,将几个相关文件存档到一个文件中进行下载.我们使用文件扩展名将下载文件与我们的桌面应用相关联.我们遇到的一个小问题是,不可能只使用像7-zip这样的第三方工具来创建zip文件,因为客户端代码无法打开它 - ZipPackage添加了一个描述内容类型的隐藏文件每个组件文件,如果缺少该内容类型文件,则无法打开zip文件.
Jos*_*hua 11
我处于相同的情况,想要.NET而不是第三方库.正如上面提到的另一张海报,仅仅使用ZipPackage类(在.NET 3.5中引入)还不够.存档中必须包含一个附加文件,以便ZipPackage正常工作.如果添加了此文件,则可以直接从Windows资源管理器打开生成的ZIP包 - 没问题.
您所要做的就是将[Content_Types] .xml文件添加到存档的根目录,并为您希望包含的每个文件扩展名添加"默认"节点.添加后,我可以从Windows资源管理器中浏览包或以编程方式解压缩并读取其内容.
有关[Content_Types] .xml文件的更多信息,请访问:http://msdn.microsoft.com/en-us/magazine/cc163372.aspx
以下是[Content_Types] .xml(必须准确命名)文件的示例:
<?xml version="1.0" encoding="utf-8" ?>
<Types xmlns=
"http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="xml" ContentType="text/xml" />
<Default Extension="htm" ContentType="text/html" />
<Default Extension="html" ContentType="text/html" />
<Default Extension="rels" ContentType=
"application/vnd.openxmlformats-package.relationships+xml" />
<Default Extension="jpg" ContentType="image/jpeg" />
<Default Extension="png" ContentType="image/png" />
<Default Extension="css" ContentType="text/css" />
</Types>
Run Code Online (Sandbox Code Playgroud)
以及用于创建ZIP文件的C#:
var zipFilePath = "c:\\myfile.zip";
var tempFolderPath = "c:\\unzipped";
using (Package package = ZipPackage.Open(zipFilePath, FileMode.Open, FileAccess.Read))
{
foreach (PackagePart part in package.GetParts())
{
var target = Path.GetFullPath(Path.Combine(tempFolderPath, part.Uri.OriginalString.TrimStart('/')));
var targetDir = target.Remove(target.LastIndexOf('\\'));
if (!Directory.Exists(targetDir))
Directory.CreateDirectory(targetDir);
using (Stream source = part.GetStream(FileMode.Open, FileAccess.Read))
{
source.CopyTo(File.OpenWrite(target));
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:
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");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160863 次 |
| 最近记录: |