簡體   English   中英

C# - 解壓縮目錄及其子目錄中的所有文件

[英]C# - Unzip all files in directory and its subdirectories

我嘗試將各自目錄/子目錄中的所有 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 檔案。 如何解決這個問題?
  3. 盡管 cmd.exe 上的 7zip 的cmd.exe打印出處理了一些提取,但沒有任何反應。 如何解決?

提前致謝。

嘗試編寫一個提取 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM