2016-12-29 21 views
1

Ionic Zipを使用して、バックアップフォルダを除いた特定のフォルダ内のすべてのフォルダを圧縮します(バックアップを作成したフォルダ)。Ionic.Zip ArgumentException(同じキーの項目が既に追加されています)

これは私のコードです:

ZipFile zip = new ZipFile(); 
string mainpath = HttpContext.Current.Server.MapPath("~/"); 
Directory.GetDirectories(mainpath).Where(d=> !d.ToLower().EndsWith("backup")).ToList() 
.ForEach(d=> zip.AddDirectory(d)); 

が、いくつかのディレクトリを追加した後、私は次のエラーを取得しています:

An item with the same key has already been added.

ことが可能であるどのように?同じ親フォルダ内のフォルダリストに名前が重複する可能性はありますか?

答えて

1

例外を調べてみると、辞書にアーカイブされるすべてのファイルのリストが追加されたようです。

このエラーを引き起こす可能性のあるキー(キーとしてファイル名を使用している可能性があり、2つの異なるフォルダで同じ名前を持つことが原因かもしれません)を使用しているかどうかわかりません。

ソリューション: 私はAddDirectoryAddFilesは、アーカイブ内のディレクトリ・パスを受け入れ、別の過負荷を持っていることが分かったが。各ディレクトリにアーカイブ内の一意のパスを与えることで問題が解決されました。私の場合、私は使用した:

string mainpath = HttpContext.Current.Server.MapPath("~/"); 
    Directory.GetDirectories(mainpath).Where(d=> !d.ToLower().EndsWith("backup")).ToList() 
.ForEach(d=> zip.AddDirectory(d, d.Substring(mainpath.Length))); 
関連する問題