[英]c# Is it possible to download a particular file from a zip file present in sftp
我正在使用下面的代码(WinScp nuget)连接到 Sftp 服务器,它运行良好。 我能够列出 Sftp 服务器中存在的文件。
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = "tst.tst.tt",
UserName = "test",
SshHostKeyFingerprint = "ssh-ed25519 255 xxxxxxxxxxxxxxxxxxxxx=",
SshPrivateKeyPath = @"D:\tst\key.ppk",
PrivateKeyPassphrase = "asdfghwetrtert",
};
sessionOptions.AddRawSettings("FSProtocol", "2");
using (Session session = new Session())
{
session.Open(sessionOptions);
RemoteDirectoryInfo directory = session.ListDirectory("/home/prod/Input");
foreach (RemoteFileInfo fileInfo in directory.Files)
{
Console.WriteLine(
"{0} with size {1}, permissions {2} and last modification at {3}",
fileInfo.Name, fileInfo.Length, fileInfo.FilePermissions,
fileInfo.LastWriteTime);
}
}
我在 Sftp 中有一个 zip 文件,是否可以仅从 zip 下载特定文件,而不是下载整个 zip 文件?
一般来说,技术上可以使用 SFTP 协议从 ZIP 存档中仅下载特定文件。 但不适用于 WinSCP,因为它不允许部分下载。
如果您使用另一个允许部分下载的 SFTP 库(例如 SSH.NET),您可以使用它首先下载 ZIP 中央目录,使用它来定位存档中的特定文件,然后下载存档的该部分(在压缩形式)并在本地解压缩。 但这并不容易,因为您必须深入挖掘 ZIP 存档格式。
作为概念的证明,这里有一个关于 Python 和 FTP 的类似问题:
在 FTP 服务器上的 zip 文件中获取文件名,而无需下载整个存档
使用 SFTP 会更容易一些,因为 SFTP 允许随机访问远程文件,而 FTP 不允许。
如果您有 shell 访问服务器,一种更简单的方法是使用 shell 命令在服务器上解压缩文件,然后下载解压缩的文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.