点网拉链 |C# 获取提取的文件夹,而不是刚刚解压缩的.zip文件

本文关键字:解压缩 文件 zip 文件夹 获取 提取 | 更新日期: 2023-09-27 18:32:05

我目前有这段代码:

     foreach (string file in openFileDialog1.FileNames)
     {
     String ExtractPath = Path.GetDirectoryName(file);   
         try
         {
             using (ZipFile zip = ZipFile.Read(file))
             {
                 zip.ExtractProgress += ExtractProgress;
                 foreach (ZipEntry e in zip)
                 {
                     try
                     {                             
                         e.Extract(ExtractPath,ExtractExistingFileAction.OverwriteSilently);  // true => overwrite existing files
                      }
                      catch
                      {
                      }
                    }
                 }
            }
            catch
            {
            }
       }

这工作正常,并同时提取一个或多个选定的zip文件。但是我对如何为每个文件创建一个单独的目录并将每个文件放入创建的目录中感到困惑。

例:

用户选择要提取的 2 个 zip 文件。2个zip文件称为"A.zip"和"B.zip"

我想以编程方式将提取的文件放入它们自己的目录中,以便我可以筛选它们以供进一步使用。

因此,将提取zip文件"A.zip",提取的文件将放入名为"解压缩A"的文件夹中,将提取zip文件"B.zip",提取的文件将放入名为"解压缩B"的文件夹中。

如果这令人困惑,我很抱歉。帮助将不胜感激。

好的,在使用和编辑 MatteKarla 的片段后,我现在有了这个:

            foreach (string file in openFileDialog1.FileNames)
        {
            string directory = Path.GetDirectoryName(file) + @"'Unzipped " + Path.GetFileNameWithoutExtension(file);
            var GetFiles = Directory.GetFiles(directory, "*.txt", SearchOption.AllDirectories).Where(s => s.EndsWith(".txt"));
            foreach (string text in GetFiles)
            {
                MessageBox.Show("Text found", "File");
            }
        }

这会在我创建的目录中搜索提取的文件以查找.txt文件,并且效果很好,我只是想知道这是否是正确的方法,或者是否有更有效的方法?

点网拉链 |C# 获取提取的文件夹,而不是刚刚解压缩的.zip文件

使用不带扩展名的文件名,您可以使用 Path.GetFileNameWithoutExtensionPath.Combine 组合路径和不带扩展名的文件名来创建新路径。

最后,只需使用 Directory.CreateDirectory 创建该目录,以便在您尝试将 zip 文件提取到ExtractPath时该目录存在。

这会将所有 zip 文件解压缩

到要解压缩的 zip 文件所在的目录,使用 OpenFileDialog 时,通常所有文件都位于同一目录中。

foreach (string file in openFileDialog1.FileNames)
 {
     String ExtractPath = Path.GetDirectoryName(file);   
     string directory = "Unzipped " + Path.GetFileNameWithoutExtension(file);
     ExtractPath = Path.Combine(ExtractPath, directory);
     Directory.CreateDirectory(ExtractPath);
     try
     {string ExtractPath = Path.GetDirectoryName(file);

如果您希望将所有文件提取到特定目录,请将目录设置在for循环之外,并将该路径与"解压缩"+文件名组合在一起。

String unpackPath = @"C:'UnpackPath";  
foreach (string file in openFileDialog1.FileNames)
 {
     string directory = "Unzipped " + Path.GetFileNameWithoutExtension(file);
     string ExtractPath = Path.Combine(unpackPath, directory);
     Directory.CreateDirectory(ExtractPath);

这将在以下文件夹中创建解压缩文件:"C:''UnpackPath''Unziped A","C:''UnpackPath''Unziped B"(使用您的示例文件名)。

您可以使用 .网的

Directory.Create("url") ;

还有

Path.GetFileName("url"); // Separates the file name from the path

创建目录并获取需要存储在其中的文件名。

您可以动态创建目录,例如将压缩文件名传递给目录 + 有效路径,例如

GetCurrentDirectory () + zipped file name