使用 lib Ionic.Zip (DotNetZip) 和 SshNet 通过 SFTP/SCP 将目录直接下载到 zip 文件的最佳方法是什么
什么是使用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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论