繁体   English   中英

c# 是否可以从 sftp 中存在的 zip 文件下载特定文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM