2016-06-15 20 views
0

我的手上有一個有趣的熟食店ma。我創建了一個程序,其中包含1-∞壓縮文件,其中還包含X個單獨文件。無論出於何種原因,不同文件夾中的文件有時會獲得相同的文件名。這是我迄今爲止的代碼...如何處理重複的壓縮文件

這段代碼的作用是,在實例化對象之後,另一個對象調用此函數,稱爲unzip()。什麼failsafe.check_directory()只是確保臨時文件夾都將被解壓縮文件將要進入是空的。第一次嘗試捕獲是我還不知道的任何事情,但第二次嘗試捕獲是捕獲重複的重複文件,所以當它真的發生時...程序不會中斷。所以我所問的問題是如何處理這個異常的最佳方式,而不僅僅是將副本踢到一邊,或者換句話說,在那個文件遲到之前重新命名該文件。

 public bool unzip() 
    { 
     int bad_file = 0; 
     failsafe.check_directory(); 
     string dupes = "dupe files\r\n"; 
     try 
     { 
      for (int i = 0; i < zippedfolders.Length; i++) 
      { 
       try 
       { 
        bad_file = i; 
        ZipFile.ExtractToDirectory(zippedfolders[i], temppath); 
       } 
       catch 
       { 
        dupes += zippedfolders[bad_file]+"\r\n"; 
        continue; 
       } 

      } 
      File.WriteAllText(@"C:\MDSSCRUBBER\BUGGED_FILE.txt", dupes); 
      files = Directory.GetFiles(temppath); 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 

    } 
+1

代替使用異常爲重複的,爲什麼不檢查[條目](https://msdn.microsoft.com/en-us/library/system.io.compression.ziparchive.entries.aspx)第一,如果其中一個已經[存在](https://msdn.microsoft.com/en-us/library/system.io.file.exists.aspx),則跳過或[rename](https:// msdn .microsoft.com/en-us/library/hh485719.aspx)。即使只有一個文件失敗,您目前的方法也會跳過存檔。 – Martheen

+0

這是一個好主意,我忍住了我是如何解決這個問題的。 –

回答

0

這就是我如何處理它......出於某些奇怪的原因,Directory類沒有在桌面上創建文件夾。

private void fix_desktop() 
    { 
     string pathington = Environment.SpecialFolder.Desktop + @"\MrEncrypto\"; 
     bool check = !Directory.Exists(pathington); 
     string finaloutput = Environment.SpecialFolder.Desktop + @"\MrEncrypto\"; 
     if (!check) 
     { 
      Directory.CreateDirectory(pathington); 
     } 
     else 
     { 
      foreach (string file in Directory.GetFiles(Environment.SpecialFolder.Desktop + @"\MrEncrypto")) 
      { 
       File.Delete(file); 
      } 
     } 

     foreach (string file in files) 
     { 
      try 
      { 
       FileStream fsInput = new FileStream(file, FileMode.Open, FileAccess.Read); 
       FileStream fsencrypt = new FileStream(finaloutput + Path.GetFileName(file), FileMode.Create, FileAccess.Write); 
       /** DESCryptoServiceProvider DES = new DESCryptoServiceProvider(); 
       DES.Key = ASCIIEncoding.ASCII.GetBytes(key); 
       DES.IV = ASCIIEncoding.ASCII.GetBytes(IV);**/ 
       AesCryptoServiceProvider DES = new AesCryptoServiceProvider(); 
       DES.BlockSize = 128; 
       DES.KeySize = 256; 
       DES.IV = ASCIIEncoding.ASCII.GetBytes(IV); 
       DES.Key = ASCIIEncoding.ASCII.GetBytes(key); 
       DES.Padding = PaddingMode.PKCS7; 
       DES.Mode = CipherMode.CBC; 
       ICryptoTransform desencrypt = DES.CreateEncryptor(); 
       CryptoStream ocstream = new CryptoStream(fsencrypt, desencrypt, CryptoStreamMode.Write); 
       //reading time 
       byte[] filetobyte = new byte[fsInput.Length - 1]; 
       fsInput.Read(filetobyte, 0, filetobyte.Length); 
       ocstream.Write(filetobyte, 0, filetobyte.Length); 
       fsInput.Close(); 
       ocstream.Close(); 
       fsencrypt.Close(); 
      } 
      catch 
      { 
       continue; 
      } 
     }//foreach 
     SystemSounds.Beep.Play(); 
     Encrypto.Enabled = false; 
    }//function