C# - Распаковать все файлы в каталоге и его подкаталогах - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь извлечь все ZIP-архивы из их соответствующего каталога / подкаталога в соответствующий каталог / подкаталог.

Пример структуры:

-Root-Directory
  - File.txt
  - Fi.docx
  - Files.zip
      - TestEx.jpg
      - Example.png
  - /Subdirectory_1
      - ExampleData.txt
      - Example.xlsx
      - Archive1.zip
           - ExampleData_1.txt
           - ExampleData_2.txt
      - Archiv2.zip
           - Data1.txt
           - Data2.txt
      - ...
  - /Subdirectory_2
      - T_1.txt
      - ABC.xlsx
      - ZippedFiles.zip
           - Imag_1.jpeg
           - Imag_2.gif
      - ZipFiles.zip
           - Music.wav
           - Sound.mp3

Как это должно выглядеть:

-Root-Directory
  - File.txt
  - Fi.docx
  - TestEx.jpg
  - Example.png
  - /Subdirectory_1
      - ExampleData.txt
      - Example.xlsx
      - ExampleData_1.txt
      - ExampleData_2.txt
      - Data1.txt
      - Data2.txt
      - ...
  - /Subdirectory_2
      - T_1.txt
      - ABC.xlsx
      - Imag_1.jpeg
      - Imag_2.gif
      - Music.wav
      - Sound.mp3

Моя попытка:

private static void unzipAllFiles(DirectoryInfo directoryPath)
        {
            foreach( DirectoryInfo dirs in directoryPath.GetDirectories() )
            {
                foreach (FileInfo file in dirs.GetFiles())
                {   
                    if(Path.GetExtension(file.FullName).Equals(".zip"))
                    {
                        //Console.WriteLine(file.FullName);
                        string zPath = @"C:\Program Files\7-Zip\7z.exe";// change the path and give yours 
                        try
                        {
                            ProcessStartInfo pro = new ProcessStartInfo();
                            pro.WindowStyle = ProcessWindowStyle.Hidden;
                            pro.FileName = zPath;
                            pro.Arguments = "x -r -aou \"" + file.FullName;
                            Process process = Process.Start(pro);
                            process.WaitForExit();
                        }
                        catch (System.Exception Ex)
                        {
                            //DO logic here 
                        }
                    }
                }
            }
        }

Несколько вещей здесь:

  1. Как подавить открытие cmd.exe?
  2. Он даже не перебирает архивы ZIP в каталоге root. Как это исправить?
  3. Хотя при выводе 7zip на cmd.exe печатается, что некоторая часть распаковки обрабатывается, ничего не происходит. Как это исправить?

Заранее спасибо.

1 Ответ

0 голосов
/ 07 мая 2020

Попробуйте написать метод, который извлекает zip-архив, а затем перебирает его извлеченное содержимое для поиска и извлечения любых других zip-файлов. Вы можете использовать классы ZipFile, FileInfo и DirectoryInfo. Вот какой-то псевдокод ...

func extractZip
    // extract zip file
    // call extractZipsFromDir using base extract path

func extractZipsFromDir
    // get list of all .zip files in cur dir
    // while list.len > 0
        // for each zip file
            // extract to curr dir
            // delete the zip
        // set list of zips to new list of all .zip files in cur dir which will pick up any newly extracted zips
    // get list of all directories in cur dir (don't include sub directories)
    // for each dir in list
        // call extractZipsFromDir with iterated dir
...