我有一个Windows Phone应用程序。我使用SharpZipLib来压缩文件夹及其子文件夹。这只是压缩文件夹,但文件夹内的数据没有压缩。任何人都可以指导我如何做到这一点?
我的代码:
private void btnZip_Click(object sender, RoutedEventArgs e)
{
using (IsolatedStorageFile appStore = IsolatedStorageFile.GetUserStoreForApplication())
{
foreach (string filename in appStore.GetFileNames(directoryName + "/" + "*.txt"))
{
GetCompressedByteArray(filename);
}
textBlock2.Text = "Created file has Zipped Successfully";
}
}
public byte[] GetCompressedByteArray(string content)
{
byte[] compressedResult;
using (MemoryStream zippedMemoryStream = new MemoryStream())
{
using (ZipOutputStream zipOutputStream = new ZipOutputStream(zippedMemoryStream))
{
zipOutputStream.SetLevel(9);
byte[] buffer;
using (MemoryStream file = new MemoryStream(Encoding.UTF8.GetBytes(content)))
{
buffer = new byte[file.Length];
file.Read(buffer, 0, buffer.Length);
}
ZipEntry entry = new ZipEntry(content);
zipOutputStream.PutNextEntry(entry);
zipOutputStream.Write(buffer, 0, buffer.Length);
zipOutputStream.Finish();
}
compressedResult = zippedMemoryStream.ToArray();
}
WriteToIsolatedStorage(compressedResult);
return compressedResult;
}
public void WriteToIsolatedStorage(byte[] compressedBytes)
{
IsolatedStorageFile appStore = IsolatedStorageFile.GetUserStoreForApplication();
appStore.CreateDirectory(ZipFolder);
using (IsolatedStorageFileStream zipTemplateStream = new IsolatedStorageFileStream(ZipFolder+"/"+directoryName + ".zip", FileMode.OpenOrCreate, appStore))
using (BinaryWriter streamWriter = new BinaryWriter(zipTemplateStream))
{
streamWriter.Write(compressedBytes);
}
}
答案 0 :(得分:1)
我认为你会发现this guide有帮助。
以上链接的摘录
ZipFile对象提供了一个名为AddDirectory()的方法 接受参数directoryName。这种方法的问题是 它不会在指定目录中添加文件 而只是在zip文件中创建一个目录。为了做到这一点 工作,您需要通过循环来获取该目录中的文件 该目录中的所有对象,并一次添加一个对象。我曾是 能够通过创建递归函数来完成此任务 钻取您想要的文件夹的整个目录结构 压缩。下面是该功能的片段。
我猜你也面临着将文件夹添加到zip文件的相同问题,但内容和子文件夹没有压缩。
希望这有帮助。
答案 1 :(得分:0)
有关如何使用SharpZipLib压缩包含嵌套文件夹的根文件夹的代码示例,请查看over here。