使用ZipArchive类C#下载/提取/覆盖.zip文件

本文关键字:提取 覆盖 zip 文件 下载 ZipArchive 使用 | 更新日期: 2024-09-08 11:14:24

我为我的网站开发应用程序已经有一段时间了,终于完成了需要下载.zip文件并将其提取到分配给变量的路径的开发部分,但我不知道如何进行。

例如,我的程序将引用用户系统上的版本文件并读取该版本,然后将检查服务器的同一版本文件(例如www.site.com/client/version.txt),如果用户版本低于服务器版本,则应从以服务器上当前版本命名的服务器(例如1001.zip)下载.zip,并将其提取到变量中设置的预定义路径(例如称为"Arma2OAPath")中,然后静默地覆盖任何文件zip文件中已经存在的。

除了MSDN,还有什么更好的文档或例子可以说明如何做类似的事情吗?

非常感谢任何帮助/资源/示例!

我已经为此工作了一段时间,一直在努力找出制作下载程序/更新程序的最简单方法,我相信以这种方式使用.zip文件将是满足我需求的最佳方法。

使用ZipArchive类C#下载/提取/覆盖.zip文件

我假设您已经知道如何下载一个文件,一旦您完成了它,您就可以提取它并检查目标上是否存在相同的文件,如果是这样,请删除该文件并从zip中复制所有文件。

以下是提取和压缩文件的代码:-

private static byte[] Compress(byte[] contentToCompress)
 {
            byte[] compressedBytes;
            using (MemoryStream ms = new MemoryStream())
            {
                using (GZipStream gs = new GZipStream(ms, CompressionMode.Compress))
                {
                    gs.Write(contentToCompress, 0, contentToCompress.Length);
                }
                compressedBytes = ms.ToArray();
            }
            return compressedBytes;
}
private static byte[] Decompress(byte[] compressedBytes)
{
            MemoryStream outputStream = new MemoryStream();
            using (MemoryStream ms2 = new MemoryStream(compressedBytes))
            {
                using (GZipStream gs2 = new GZipStream(ms2, CompressionMode.Decompress))
                {
                    byte[] bufffer = new byte[0x400];
                    int count = gs2.Read(bufffer, 0, bufffer.Length);
                    while (count != 0)
                    {
                        outputStream.Write(bufffer, 0, count);
                        count = gs2.Read(bufffer, 0, bufffer.Length);
                    }
                    return outputStream.ToArray();
                }
            }
            return null;
 }