使用 lib Ionic.Zip (DotNetZip) 和 SshNet 通过 SFTP/SCP 将目录直接下载到 zip 文件的最佳方法是什么

发布于 2025-01-19 18:17:30 字数 2016 浏览 1 评论 0原文

什么是使用lib ionic.zip(dotnetzip)和sshnet通过SFTP/SCP直接下载到ZIP文件的目录的最佳方法,我想在不耗尽内存的情况下执行此操作首先到本地磁盘。

我制作了此代码,但我有内存溢出问题。

static void Main(string[] args)
{
            var connectionInfo = new ConnectionInfo("192.168.133.13", "user",
                                        new PasswordAuthenticationMethod("user", "pass"));
            var client = new SftpClient(connectionInfo);            
            client.Connect();
            DownloadDirectoryAsZip(client, "/var/www/dart/intranetbrowser", @"C:\MyCsharpProjects\fsbackup\download.zip");
            client.Dispose();  
            
}
public static void DownloadDirectoryAsZip(SftpClient sftpClient, string sourceRemotePath, string destLocalPath)
{
            ZipFile zip = new ZipFile();      
            DownloadDirectoryAsZipRec(zip, sftpClient, sourceRemotePath);
            zip.Save(destLocalPath);
            zip.Dispose();
}
private static void DownloadDirectoryAsZipRec(ZipFile zip,SftpClient sftpClient, string sourceRemotePath)
{
         
            IEnumerable<SftpFile> files = sftpClient.ListDirectory(sourceRemotePath);
            foreach (SftpFile file in files)
            {
                if ((file.Name != ".") && (file.Name != ".."))
                {
                    string sourceFilePath = sourceRemotePath + "/" + file.Name;
                  
                    if (file.IsDirectory)
                    {
                        DownloadDirectoryAsZipRec(zip,sftpClient, sourceFilePath);
                    }
                    else
                    {
                        var memoryStream = new MemoryStream();                                               
                        sftpClient.DownloadFile(sourceFilePath, memoryStream);                                                
                        zip.AddEntry(sourceFilePath, memoryStream);                        
                    }
                }
            }
}

What is the best way to use the lib Ionic.Zip (DotNetZip) and SshNet to download a directory via SFTP/SCP directly to a zip file, I would like to do this without running out of memory and if possible without having to download it to the local disk first.

I made this code but I'm having memory overflow problems.

static void Main(string[] args)
{
            var connectionInfo = new ConnectionInfo("192.168.133.13", "user",
                                        new PasswordAuthenticationMethod("user", "pass"));
            var client = new SftpClient(connectionInfo);            
            client.Connect();
            DownloadDirectoryAsZip(client, "/var/www/dart/intranetbrowser", @"C:\MyCsharpProjects\fsbackup\download.zip");
            client.Dispose();  
            
}
public static void DownloadDirectoryAsZip(SftpClient sftpClient, string sourceRemotePath, string destLocalPath)
{
            ZipFile zip = new ZipFile();      
            DownloadDirectoryAsZipRec(zip, sftpClient, sourceRemotePath);
            zip.Save(destLocalPath);
            zip.Dispose();
}
private static void DownloadDirectoryAsZipRec(ZipFile zip,SftpClient sftpClient, string sourceRemotePath)
{
         
            IEnumerable<SftpFile> files = sftpClient.ListDirectory(sourceRemotePath);
            foreach (SftpFile file in files)
            {
                if ((file.Name != ".") && (file.Name != ".."))
                {
                    string sourceFilePath = sourceRemotePath + "/" + file.Name;
                  
                    if (file.IsDirectory)
                    {
                        DownloadDirectoryAsZipRec(zip,sftpClient, sourceFilePath);
                    }
                    else
                    {
                        var memoryStream = new MemoryStream();                                               
                        sftpClient.DownloadFile(sourceFilePath, memoryStream);                                                
                        zip.AddEntry(sourceFilePath, memoryStream);                        
                    }
                }
            }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文