Just in case my previous post on the subject did not ring a bell, the release of version 2.1 of Xceed FTP for .NET means you can directly unzip from a zip file located on an FTP server, without downloading the file first! Look at the following code:
using( FtpConnection connection = new FtpConnection( "ftp.xceed.com" ) )
{
FtpFile source = new FtpFile( connection, @"/images/Flowers/Backup/Flowers.zip" );
DiskFolder dest = new DiskFolder( @"d:\temp\flowers" );
ZipArchive zip = new ZipArchive( source );
zip.CopyFilesTo( dest, true, true );
}
The secret behind this code is the kind of stream "FtpFile.OpenRead" returns. Though we are dealing with a network connection, this stream is fully seekable! The FtpFile takes advantage of the "REST" FTP command, which tells the FTP server we wish to start the transfer at a specific offset. Thus, when the ZipArchive needs to seek at the end of the file to locate the ending header, a proper "REST" command is issued to avoid having to read all the zip file first. And the same happens when reading the central directory, or unzipping specific files.