2

私は最初にそれをチェックする方法を理解しようとしています

コレクションにある各ファイルをループしてZipFileコレクションに追加しようとすると、次のようになります。

using (var zip = new ZipFile())
{
    foreach(...)
    {
         var tryFile = Directory.
                 GetFiles(fileLocalization, fileName, 
                                             SearchOption.TopDirectoryOnly);

         if (!string.IsNullOrEmpty(file[0]))
              zip.AddItem(file[0], GetPathStructure(file.NameInContainer));
    }
}

ZipFileタイプはIonic.Zip.dll

問題は、AddItemエラーが発生し、同じキーのアイテムがすでに追加されていることです。したがって、たとえば、最後に、このzipディクショナリですでに追加されているこのキーを追加しようとします。

"C:\ www \ files \ 233272 \ Exercise Files \ SampleCode \ Original \ MyTest.cs"

dupが正しく機能するかどうかを確認できません...ループ内でこれを2回追加しようとします。

追加する前にfile[0]を確認するにはどうすればよいですか?私は試しLINQ .Any()ましたが、これにLINQを使用することさえできれば、構文を正しく理解できませんでした。

私はこれを試しましたが、構文的にこれを正しく行っていません:

if (!string.IsNullOrEmpty(tryFile[0]) && !zip.Contains(tryFile[0])

また試した

if (!string.IsNullOrEmpty(tryFile[0]) && !zip.Any(zip[tryFile[0]])

また試した

if (!string.IsNullOrEmpty(tryFile[0]) && !zip.ContainsEntry(tryFile[0]))
4

3 に答える 3

3

Qu は少し古いですが、空の zip を作成していっぱいにしているのですから、自分でファイル名を追跡してみませんか? を作成しList<string>、各ファイル名をそれに追加し、.contains を使用して、追加しようとしているファイルが既にそこにあるかどうかを確認します。リストは、ZIP ファイルの内容を正確に反映している必要があります。

私のプロジェクトで簡単にチェックした後:

  zip.ContainsEntry("filename.ext")

仕事をするべきです。また、List<string>IONIC ZIP が保持しているように見えるのは

  zip.EntryFileNames
于 2012-06-06T06:02:24.777 に答える
0

かなり古い質問ですが、明確にする必要がありました。ベン・マッキンタイアは正しかった。私が遭遇した問題は、同じ名前の別のディレクトリからファイルを追加していたため、file[0] を使用してエントリが含まれているかどうかを確認しても機能しないことです。ファイル名を取得する必要があります。Path.GetFileName(fullPath); の使用をお勧めします。

using (var zip = new ZipFile())
{
    foreach(...)
    {
         var tryFile = Directory.
             GetFiles(fileLocalization, fileName, 
                                         SearchOption.TopDirectoryOnly);
         var fileName = Path.GetFileName(file[0]);
         if (!string.IsNullOrEmpty(file[0]) && !zip.ContainsEntry(fileName))
             zip.AddItem(file[0], GetPathStructure(file.NameInContainer));
    }
}
于 2014-12-01T16:29:36.303 に答える
0

これが投稿されてから長い間、私は同じ問題を抱えていました.私がしたことは、新しいファイルを作成する前にZipファイルが削除されていることを確認することです. 新しいzipを作成し、それがすでに存在する場合、それに追加するだけだと思います。

            if (File.Exists(file_name))
            {
                File.Delete(file_name);
            }
于 2012-12-11T12:45:28.040 に答える