//-----------------------------------------------------------------------
// <copyright file="ZipUtility.cs" company="motion10">
// Copyright (c) motion10. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using Microsoft.SharePoint;
namespace Motion10.SharePoint2007.Zip { public static class ZipUtility { /// <summary>
/// Adds the SPListItemCollection to the zip output stream.
/// </summary>
/// <param name="zipOutputStream">The zip output stream.</param>
/// <param name="listItemCollection">The list item collection.</param>
public static void AddSPListItemCollection(this ZipOutputStream zipOutputStream, SPListItemCollection listItemCollection) { foreach (SPListItem listItem in listItemCollection) { switch (listItem.FileSystemObjectType) { case SPFileSystemObjectType.File:
zipOutputStream.AddSPFile(listItem.File);
break;
case SPFileSystemObjectType.Folder:
zipOutputStream.AddSPFolder(listItem.Folder);
break;
}
}
}
/// <summary>
/// Adds the SPFolder to the zip output stream.
/// </summary>
/// <param name="zipOutputStream">The zip output stream.</param>
/// <param name="folder">The folder.</param>
public static void AddSPFolder(this ZipOutputStream zipOutputStream, SPFolder folder) { zipOutputStream.AddSPFolder(folder, string.Empty);
}
/// <summary>
/// Adds the SPFolder to the zip output stream.
/// </summary>
/// <param name="zipOutputStream">The zip output stream.</param>
/// <param name="folder">The folder.</param>
/// <param name="path">The path.</param>
public static void AddSPFolder(this ZipOutputStream zipOutputStream, SPFolder folder, string path) { path = Path.Combine(path, folder.Name);
ZipEntry entry = new ZipEntry(path + "/");
zipOutputStream.PutNextEntry(entry);
foreach (SPFile file in folder.Files) { zipOutputStream.AddSPFile(file, path);
}
foreach (SPFolder subFolder in folder.SubFolders) { AddSPFolder(zipOutputStream, subFolder, path);
}
}
/// <summary>
/// Adds the SPFile to the zip output stream.
/// </summary>
/// <param name="zipOutputStream">The zip output stream.</param>
/// <param name="file">The file.</param>
public static void AddSPFile(this ZipOutputStream zipOutputStream, SPFile file) { zipOutputStream.AddSPFile(file, string.Empty);
}
/// <summary>
/// Adds the SPFile to the zip output stream.
/// </summary>
/// <param name="zipOutputStream">The zip output stream.</param>
/// <param name="file">The file.</param>
/// <param name="path">The path.</param>
public static void AddSPFile(this ZipOutputStream zipOutputStream, SPFile file, string path) { string filePath = Path.Combine(path, file.Name);
ZipEntry entry = new ZipEntry(filePath);
entry.DateTime = file.TimeCreated;
zipOutputStream.PutNextEntry(entry);
using (Stream fileStream = file.OpenBinaryStream()) { byte[] buffer = new byte[4096];
int sourceBytes;
do { sourceBytes = fileStream.Read(buffer, 0, buffer.Length);
zipOutputStream.Write(buffer, 0, sourceBytes);
} while (sourceBytes > 0);
}
}
}
}