zqxzky 2019-05-30 18:01 采纳率: 0%
浏览 449

C#调用WinRar.exe进行解压缩操作的问题

就是比如说,一个AA文件夹里面有两个文件分别为①文件和②文件,那么如果直接对AA文件夹进行压缩的话,会导致压缩包里面首先是AA文件夹这个目录,双击目录后,才看到对应的两个文件,如果我要压缩包里面不出现AA这个目录,而是直接出现①文件和②文件,这个该怎么写命令。还有一种情况,比如我直接用Ctrl选择①文件和②文件后,添加压缩文件为XXX.rar,那么这种方式得到的压缩包下也是可以直接看到这两个文件的,那么这种方式的命令该如何写,求教!!!

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-09 23:17
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,你需要使用System.IO.File类和System.IO.Compression库来实现你的需求。以下是一个可能的解决方案:

    using System;
    using System.IO;
    using System.IO.Compression;
    
    class Program {
        static void Main(string[] args) {
            // 压缩文件夹
            string sourceFolder = @"C:\YourSourceFolder";
            string targetFolder = @"C:\YourTargetFolder";
    
            // 解压文件夹
            string srcFile = Path.Combine(sourceFolder, "AA");
            string dstFile = Path.Combine(targetFolder, "AA");
    
            // 创建一个新的压缩文件
            using (var memoryStream = new MemoryStream()) {
                var zipArchive = new ZipArchive(memoryStream);
                zipArchive.CreateEntry(srcFile).SetCompressionType(ZipArchive.CompressLevel.Queued);
    
                // 将压缩文件移动到目标位置
                zipArchive.Save(dstFile);
            }
        }
    }
    

    在这个示例中,我们首先获取源文件夹中的所有文件,并将它们存储在一个内存流中。然后,我们创建一个新的ZipArchive对象,并在其中创建一个包含指定文件的子文件夹。最后,我们将这个新创建的ZipArchive保存到目标文件夹。

    如果你只想解压并查看文件而不是压缩文件,请稍作修改:

    using System;
    using System.IO;
    using System.IO.Compression;
    
    class Program {
        static void Main(string[] args) {
            // 解压文件夹
            string sourceFolder = @"C:\YourSourceFolder";
            string targetFolder = @"C:\YourTargetFolder";
    
            // 解压文件夹
            string srcFile = Path.Combine(sourceFolder, "AA");
            string dstFile = Path.Combine(targetFolder, "AA");
    
            // 解压缩文件
            using (var memoryStream = File.OpenRead(srcFile)) {
                using (var archive = new ZipArchive(memoryStream)) {
                    foreach (var entry in archive.Entries) {
                        if (!entry.FullName.EndsWith(".rar")) {
                            Console.WriteLine(entry.FullName);
                        }
                    }
                }
            }
        }
    }
    

    在这个版本中,我们只读取了源文件夹中的所有文件(包括RAR文件),并将结果打印到控制台。你可以根据需要修改这个逻辑以满足你的需求。

    评论

报告相同问题?