2016-06-15 10 views
0

私は私の手に面白いデリマを持っています。私は個々のファイルのX個の量を含む1-∞の圧縮ファイルを取るプログラムを作成しました。何らかの理由で、異なるフォルダのファイルが同じファイル名を取得することがあります。これは私が今まで持っていたコードです...重複した圧縮ファイルを処理する方法

このコードは、インスタンス化されたオブジェクトの後に別のオブジェクトがというunzip()という名前のこの関数を呼び出したことを示しています。何よりすべてfailsafe.check_directory()は、一時フォルダが解凍されるすべてのファイルが入っていることが空であることを確認します。最初のtryキャッチは私がまだ知らないもののものですが、2回目のキャッチは重複した重複ファイルをキャッチして実際に起こったときに...プログラムが中断しないようにします。だから私が質問しているのは、サイドに重複を蹴ることなくこの例外を処理する最良の方法は何か、つまり、そのファイルの名前を遅くする前に名前を変更することです。

 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)、スキップまたは[名前の変更](https:// msdn Microsoft.com/ja-jp/library/hh485719.aspx)を参照してください。現在の方法では、ファイルの1つだけが失敗した場合でもアーカイブをスキップします。 – Martheen

+0

それは良い考えです、私はいくつかのこの問題にどのように取り組みましたか。 –

答えて

0

これは私がそれを処理した方法です...いくつかの奇妙な理由から、ディレクトリクラスはデスクトップにフォルダを作成していません。

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 
関連する問題