.NET 3.5如何使用DotNetZip将ZIP文件解压缩到指定位置

驱车

如果安装了.NET 4.5,我具有以下功能,效果很好

public static void SearchZippedLogs()
    {
        Console.WriteLine("Searching compressed logs");
        Console.WriteLine(" ");

        DirectoryInfo di = new DirectoryInfo(sPath + "\\" + sDate + "\\");
        FileInfo[] files = di.GetFiles("*.zip");

        try
        {
            foreach (var file in files)
            {
                using (ZipArchive archive = ZipFile.OpenRead(sPath + "\\" + sDate + "\\" + file.Name))
                {
                    foreach (ZipArchiveEntry entry in archive.Entries)
                    {
                        if (entry.FullName.EndsWith(".ininlog", StringComparison.OrdinalIgnoreCase))
                        {
                            try
                            {
                                Directory.CreateDirectory(temp);
                                entry.ExtractToFile(Path.Combine(temp, entry.FullName));
                                try
                                {
                                    Stream sTemp = new FileStream(temp + "\\" + entry.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

                                    using (StreamReader sr = new StreamReader(sTemp))
                                    {
                                        string line;
                                        while ((line = sr.ReadLine()) != null)
                                        {
                                            if (line.Contains(sTerm))
                                            {
                                                Console.WriteLine("{0} contains\"{1}\"", file.Name, sTerm);
                                                if (bLog)
                                                    Logger(file.Name + " contains " + sTerm, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm);
                                                break;
                                            }
                                        }
                                    }
                                }
                                catch (UnauthorizedAccessException ae)
                                {
                                    Console.WriteLine(ae.Message);
                                    if (bLog)
                                        Logger(ae.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm);
                                }
                                catch (SystemException se)
                                {
                                    Console.WriteLine(se.Message);
                                    if (bLog)
                                        Logger(se.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm);
                                }
                                catch (ApplicationException ape)
                                {
                                    Console.WriteLine(ape.Message);
                                    if (bLog)
                                        Logger(ape.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm);
                                }
                                catch (Exception e)
                                {
                                    Console.WriteLine(e.Message);
                                    if (bLog)
                                        Logger(e.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm);
                                }
                            }
                            catch (UnauthorizedAccessException ae)
                            {
                                Console.WriteLine(ae.Message);
                                if (bLog)
                                    Logger(ae.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm);
                            }
                            catch (SystemException se)
                            {
                                Console.WriteLine(se.Message);
                                if (bLog)
                                    Logger(se.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm);
                            }
                            catch (ApplicationException ape)
                            {
                                Console.WriteLine(ape.Message);
                                if (bLog)
                                    Logger(ape.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm);
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(e.Message);
                                if (bLog)
                                    Logger(e.Message, Environment.GetEnvironmentVariable("COMPUTERNAME") + "-" + sTerm);
                            }
                            finally
                            {
                                Directory.Delete(temp, true);
                                archive.Dispose();
                            }
                        }
                    }
                }
            }
        }

问题是由于我们运行的软件,我们的服务器上仅运行.NET 3.5,我需要使用.NET 3.5完成相同的操作

我看过DotNetZip和DeflateStream类,但是在将其复制到.NET 3.5时遇到麻烦

预期结果将目录中的每个zip文件提取到一个临时位置,在其中搜索项目,如果找到则打印文件名,然后删除该临时项目

感谢您的协助

所以我想我用以下方法解决了

using System;
using System.IO;
using Ionic.Zip;
namespace DotNetTest
{
  class Program
  {
    private static string sPath;
    private static string sTempLoc = Path.GetTempPath() + Path.GetRandomFileName();
    static void Main(string[] args)
    {
        Console.WriteLine("Enter Path");
        sPath = Console.ReadLine();

        Console.WriteLine("Looking in " + sPath);

        DirectoryInfo di = new DirectoryInfo(sPath + "\\");
        FileInfo[] files = di.GetFiles("*.zip");

        foreach (var file in files)
        {
            //Console.WriteLine(file.FullName);
            using (ZipFile archive = ZipFile.Read(file.FullName))
            {
                foreach(ZipEntry e in archive)
                {
                    Console.WriteLine("Extracting " + e.FileName + " to " + sTempLoc);
                    e.Extract(sTempLoc, ExtractExistingFileAction.OverwriteSilently);
                }
            }
        }
        Console.WriteLine("Finsihed! Press any key to exit");
        Console.ReadKey();
    }
}
}
BK

这是一种可以做到这一点的方法。只需传递文件的路径和目标目录作为参数即可。

private void UnZip(string filePath, string targetPath)
{
    if (String.IsNullOrWhiteSpace(filePath) || String.IsNullOrWhiteSpace(targetPath))
    {
        throw new ArgumentException("Arguments cannot be null or empty.");
    }

    using (ZipFile zf = ZipFile.Read(filePath))
    {
        foreach (var entry in zf)
        {
            entry.Extract(targetPath, ExtractExistingFileAction.OverwriteSilently);
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Python 3将lzma2(.xz)和zstd(.zst)文件解压缩到文件夹中?

在Amazon S3上解压缩ZIP文件

AS3:如何检查是否已解压缩所有zip文件?

使用.NET 2.0解压缩文件

在AWS Lambda上运行IronPDF-无法将二进制文件解压缩到/ tmp(.NET / C#)

解压缩.zip文件并使用python和boto 3传输到s3存储桶

批处理如何使用 7zip 将多个 zip 文件解压缩到其原始文件夹?

解压缩压缩的文件夹,ASP.NET MVC 5

如何将 .zip 文件解压缩到 lambda 函数中的目录

如何将文件解压缩到当前目录?

如何在mac上正确压缩文件以通过python从s3解压缩?

如何使用powershell将tar文件解压缩到特定文件夹

Python 3 zip列表解压缩

如何直接在s3上解压缩s3上的文件?

如何使用7zip解压缩文件并将其复制到特定位置?

在.net中以编程方式解压缩文件

如何将zip文件解压缩到文件夹中,但要避免重复文件夹?

使用 Lambda 和 Node.JS 为 Amazon S3 解压缩将内容类型设置为应用程序/八位字节流,并且不提取 zip 中的最后一个文件

如何使用C#.NET 3.5解压缩7z存档?

如何解压缩文件列表并将其推送到 S3?

如何在Python3中解压缩用PKZIP以外的算法加密的文件?

如何将解压缩的十进制转换回COMP-3?

使用 C# 在 Stream 中解压缩 S3 文件

将 .zip 文件解压缩到文件夹 C#

将zip文件解压缩到本地文件夹

将zip解压缩到内存中,解析内容

在.Net中解压缩Comp-3时遇到麻烦。Comp-3值内除符号字符外还有字母字符

如何仅通过批处理代码将所有文件压缩到指定位置?

zipfile将zip解压缩到一个文件夹