簡體   English   中英

DotNetZip | C#獲取解壓縮的文件夾,而不是剛剛解壓縮的.zip文件?

[英]DotNetZip | C# Getting the extracted folder, not the .zip file that has just been unzipped?

我目前有以下代碼:

     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”,並將解壓縮的文件放入名為“ Unzipped A”的文件夾中,並將解壓縮zip文件“ B.zip”,並將提取的文件置於名為“ Unzipped”的文件夾中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文件,並且效果很好,我只是想知道這是否是正確的方法,還是有更有效的方法?

使用不帶擴展名的文件名,您可以使用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循環外,然后將該路徑與“ Unzipped” +文件名結合在一起。

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 \\ Unzipped A”,“ C:\\ UnpackPath \\ Unzipped B”(使用示例文件名)。

您可以使用.Net

Directory.Create("url") ;

並且

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

創建目錄並獲取需要存儲在其中的文件名。

您可以動態創建目錄,例如,將壓縮文件名傳遞到目錄+有效路徑,例如

GetCurrentDirectory () + zipped file name 

暫無
暫無

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

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