以编程方式从 SharePoint 文档库压缩文件(无第 3 方工具)
Programmatically zip files from SharePoint document library (no 3rd party tools)
我想要实现的是在 SharePoint 表单库中拥有一个 InfoPath 表单(.Net 4.5 c# 代码),然后按下按钮,文档库中的某些文件将被打包到一个 zip 文件中。
困难是,我不能使用 3rd 方工具。
我的方法是这样看的:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite siteCollection = new SPSite(site))
{
using (SPWeb oWeb = siteCollection.OpenWeb())
{
//Identifies the mode we will be using - the default is Create
ZipArchiveMode mode = ZipArchiveMode.Create;
using (ZipArchive zipFile = ZipFile.Open(archiveFullName, mode))
{
foreach (string file in files)
{
//Adds the file to the archive
zipFile.CreateEntryFromFile(file, Path.GetFileName(file), compression);
}
}
}
}
});
这里的问题是,ZipFile Open()-方法(可能还有 'CreateEntryFromFile'-方法)没有将 URL 作为参数并抛出一个不支持异常。
有人知道如何解决这个问题吗?
提前谢谢你。
此致
格雷文
看起来您正在创建一个全新的 zip 文件,而不是更新现有的文件(如果我的假设有误,请告诉我)。如果您想在内存中创建 zip 存档而不是在磁盘上创建 zip 文件,那么您可以使用 ZipArchive class.
using (MemoryStream stream = new MemoryStream())
{
using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Create))
{
archive.CreateEntryFromFile(fileToPutInZip, fileNameInZip);
}
// To get the zip bytes (i.e. to return in HTTP response maybe):
byte[] bytes = stream.ToArray();
// TODO: Do something with zip bytes
}
我想要实现的是在 SharePoint 表单库中拥有一个 InfoPath 表单(.Net 4.5 c# 代码),然后按下按钮,文档库中的某些文件将被打包到一个 zip 文件中。 困难是,我不能使用 3rd 方工具。
我的方法是这样看的:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite siteCollection = new SPSite(site))
{
using (SPWeb oWeb = siteCollection.OpenWeb())
{
//Identifies the mode we will be using - the default is Create
ZipArchiveMode mode = ZipArchiveMode.Create;
using (ZipArchive zipFile = ZipFile.Open(archiveFullName, mode))
{
foreach (string file in files)
{
//Adds the file to the archive
zipFile.CreateEntryFromFile(file, Path.GetFileName(file), compression);
}
}
}
}
});
这里的问题是,ZipFile Open()-方法(可能还有 'CreateEntryFromFile'-方法)没有将 URL 作为参数并抛出一个不支持异常。 有人知道如何解决这个问题吗?
提前谢谢你。 此致 格雷文
看起来您正在创建一个全新的 zip 文件,而不是更新现有的文件(如果我的假设有误,请告诉我)。如果您想在内存中创建 zip 存档而不是在磁盘上创建 zip 文件,那么您可以使用 ZipArchive class.
using (MemoryStream stream = new MemoryStream())
{
using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Create))
{
archive.CreateEntryFromFile(fileToPutInZip, fileNameInZip);
}
// To get the zip bytes (i.e. to return in HTTP response maybe):
byte[] bytes = stream.ToArray();
// TODO: Do something with zip bytes
}