How to check whether file exists in zip file using dotnetzip

17,751

Solution 1

How to check whether file exists in zip file?

Just use LINQ Any, assume you have input zip file input.zip, to check whether input.zip contains input.txt:

 var zipFile = ZipFile.Read(@"C:\input.zip");
 var result = zipFile.Any(entry => entry.FileName.EndsWith("input.txt"));

Solution 2

(This is not dotnetzip but will get the job done.)

Requires: using System.IO.Compression;

Assembly: System.IO.Compression.FileSystem.dll

public static bool ZipHasFile(string fileFullName, string zipFullPath)
{
    using (ZipArchive archive = ZipFile.OpenRead(zipFullPath))  //safer than accepted answer
    {
        foreach (ZipArchiveEntry entry in archive.Entries)
        {
            if (entry.FullName.EndsWith(fileFullName, StringComparison.OrdinalIgnoreCase))
            {
                return true;
            }
        }
    }
    return false;
}

Example call: var exists = ZipHelper.ZipHasFile(@"zipTest.txt", @"C:\Users\...\Desktop\zipTest.zip");

Share:
17,751
chetan
Author by

chetan

Updated on June 08, 2022

Comments

  • chetan
    chetan almost 2 years

    I am creating zip using dotnetzip library.

    But I don't know how to check if a file exists in the zip. If the file exists then I will update the file with path.

        public void makezip(string flname)
       {
          string  fln =flname;
            string curFile = @"d:\crs.zip";
            if (File.Exists(curFile))
            {
                    ZipFile zipfl = ZipFile.Read(@"D:\crs.zip");
                var result = zipfl.Any(entry => entry.FileName.EndsWith(@fln));
                if (result == true) {
                    zipfl.UpdateFile(@fln);
                    }else{
                      zipfl.AddFile(@fln);
                    }
                zipfl.Save(@"d:\crs.zip");
            }
            else
            {
                try
                {
                    ZipFile zipfl = new ZipFile();
    
                    var result = zipfl.Any(entry => entry.FileName.EndsWith(@fln));
                    if (result == true)
                    {
                      zipfl.AddFile(@fln);
                    }
                    zipfl.Save(@"d:\crs.zip");
                }catch {
                    MessageBox.Show("Invalid Zip File");
    
                }}}