Search code examples
c#.netiozip

Zip up collection of files and move to target location


I'm collecting all my files in a target directory and adding them to a zip folder. Once this zip is made and no more files need adding to it, I want to move this zip folder to another location.

Here is my code for doing all of the above:

var targetFolder = Path.Combine(ConfigurationManager.AppSettings["targetFolder"], "Inbound");
var archiveFolder = ConfigurationManager.AppSettings["ArchiveFolder"];

// get files
var files = Directory.GetFiles(targetFolder)
    .Select(f => new FileInfo(f))
    .ToList();

// places files into zip
using (var zip = ZipFile.Open("file.zip", ZipArchiveMode.Create))
{
    foreach (var file in files)
    {
        var entry = zip.CreateEntry(file.Name);
        entry.LastWriteTime = DateTimeOffset.Now;

        using (var stream = File.OpenRead(file.ToString()))
        using (var entryStream = entry.Open())
            stream.CopyTo(entryStream);
    }
}

// move the zip file
File.Move("file.zip", archiveFolder );

Where I'm falling down is the moving of the zip folder. When my code gets to File.Move I get an error telling me it can not create something that already exists. This happen even when I hard code in my archive folder location instead of getting it from my config.

What am I doing wrong with this?


Solution

  • You need to specify the destination file name as well as directory:

    File.Move("file.zip", Path.Combine(archiveFolder, "file.zip"));