Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有.NET3.5的SFTP_C#_.net_.net 3.5_Sftp - Fatal编程技术网

C# 带有.NET3.5的SFTP

C# 带有.NET3.5的SFTP,c#,.net,.net-3.5,sftp,C#,.net,.net 3.5,Sftp,我需要连接到SFTP服务器以使用C#/.NET 3.5下载和上载文件 NET 3.5 framework是否提供任何内置工具/机制/库来连接到SFTP服务器以下载和上载文件 否,.NET不附带任何SFTP库。然而,WinSCP是一个可以下载的免费工具。我以前使用它从PayPal报表服务器下载信息 它有一个很好的命令行设置,可以自动下载/上传文件。因此,在我的.NET应用程序中,您只需使用特定参数调用流程,然后等待它完成 该框架不提供SFTP支持。有商业解决方案: …免费: 我个人

我需要连接到SFTP服务器以使用C#/.NET 3.5下载和上载文件


NET 3.5 framework是否提供任何内置工具/机制/库来连接到SFTP服务器以下载和上载文件

否,.NET不附带任何SFTP库。然而,WinSCP是一个可以下载的免费工具。我以前使用它从PayPal报表服务器下载信息


它有一个很好的命令行设置,可以自动下载/上传文件。因此,在我的.NET应用程序中,您只需使用特定参数调用流程,然后等待它完成

该框架不提供SFTP支持。

有商业解决方案:

…免费:


我个人对它们都没有任何经验。

由于没有本机支持,uou可以在谷歌中搜索其他商业组件,只需键入类似“SFTP components.NET”的内容即可。

IIS 7.x(随Windows server 2008或Windows 7提供)支持,而不是本机支持的SFTP(解释请参见下面的更新)-但是,有一些服务器解决方案可用于sFTP协议

如果您需要sFTP客户端,Microsoft目前尚未提供任何支持。但我对名为wodSFTP.NET的第三方.NET组件(这是一个sFTP客户端)有很好的体验

您可以在此处找到产品和文档:。 示例和在线文档可以免费下载或注册

请注意,您可以选择购买的版本是不使用C#中的源代码还是使用C#中的源代码。它们也有一个SSH组件。在C#和VB.NET中,示例始终可用(无论您选择的版本如何)

示例(来自网站www.weonlydo.com,转换为C#):

本例使用阻塞(同步)模式。请注意,您也可以异步使用组件-在这种情况下,将触发事件,您可以编写事件处理程序对其作出反应

请注意,此示例不使用密钥进行身份验证,但当然也支持此功能(您可以使用基于密钥的身份验证、基于密码的身份验证或两者兼用)



更新:和是不同的协议。请按照链接进行解释。

我更喜欢WinSCP。它是免费的,我以前也试过,它工作得很好。如果您下载COM文件,您可以执行以下操作: 注意:我正在从ini传递参数

  const string logname = "log.xml";
            string username = ini.IniReadValue("sftp", "Username");
            string password = ini.IniReadValue("sftp", "Password");
            string remotehost = ini.IniReadValue("sftp", "Remote Host");
            string dloadpath = ini.IniReadValue("Download", "Local Path");

            Process winscp = new Process();
            winscp.StartInfo.FileName = @ini.IniReadValue("winscp", "compath");
            winscp.StartInfo.Arguments = "/log=" + logname;
            winscp.StartInfo.UseShellExecute = false;
            winscp.StartInfo.RedirectStandardInput = true;
            winscp.StartInfo.RedirectStandardOutput = true;
            winscp.StartInfo.CreateNoWindow = true;

            try
            {
                winscp.Start();
                lblconfirm.Text = "Status: WinSCP Started Successfully";
            }
            catch (Exception ex)
            {

                writeLog("from PutSFTP:  Could not run the WinSCP executable " + winscp.StartInfo.FileName + Environment.NewLine + ex.Message);
            }


            winscp.StandardInput.WriteLine("option batch abort");
            winscp.StandardInput.WriteLine("option confirm off");
            winscp.StandardInput.WriteLine("open sftp://" + username + ":" + password + "@" + remotehost);
            winscp.StandardInput.WriteLine("cd " + ini.IniReadValue("Download", "Remote Path"));
            winscp.StandardInput.WriteLine(@"get " + "/" + ini.IniReadValue("Download", "Remote Path") + "/*" + ini.IniReadValue("Download", "FileType") + " " + ini.IniReadValue("Download", "Local Path"));
            winscp.StandardInput.Close();

            string output = winscp.StandardOutput.ReadToEnd();
            lblconfirm.Text = "Download Success! Check logs for moe info";

            winscp.WaitForExit();

在任何版本的.NET framework中都不支持SFTP


Sanj的答案显示了如何通过驱动其控制台应用程序来使用。虽然这确实是可能的,但对于开发人员来说,这实际上是在哪里实现的,为他/她提供了WinSCP脚本的本机.NET接口

甚至还有一个

一个简单的SFTP上传C#示例:

VB.NET也是如此:

' Setup session options
Dim sessionOptions As New SessionOptions
With sessionOptions
    .Protocol = Protocol.Sftp
    .HostName = "example.com"
    .UserName = "user"
    .Password = "mypassword"
    .SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
End With

Using session As New Session
    ' Connect
    session.Open(sessionOptions)

    ' Upload files
    session.PutFiles("d:\toupload\*", "/home/user/").Check()
End Using
两种语言都有(甚至更多)


您可以像上面一样拥有,包括C#、VB.NET和PowerShell


如上所述,程序集只是WinSCP脚本的包装器,因此它不是完全本机的.NET代码。因此,它不适合.NET framework中的所有用例。它主要适用于自动化任务,而不是开发GUI或web应用程序

对于完全本机的.NETSFTP库,请参见,奇怪的是,在任何答案中都没有提到它


(我是WinSCP的作者)

添加可点击链接:如果您谈论的是商业库,您肯定应该添加SecureBackbox库:对于仍在寻找此答案并开放使用商业解决方案的任何人,也应该尝试具有许多高级功能的库。我对它有很好的经验。SharpSSH是一个死项目,请避免id。您能在IIS 7.x中添加有关SFTP服务器信息的链接吗?据我所知,IIS 7附带FTPS(FTP/SSL),不是SFTP。不一样。请看@Martin:你是对的,谢谢你的提示。我已经更新了我的答案。WinSCP确实是一个很好而且有用的工具,我可以推荐它!我使用命令行界面进行批脚本编写。WinSCP周围有一个包装器,所以你可以得到一个本机.NET界面-请看,我同意没有FTP本机支持还没有。我们公司使用它作为WinSCP的包装器,所以您不需要大部分代码。-请参阅
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Sftp,
    HostName = "example.com",
    UserName = "user",
    Password = "mypassword",
    SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Upload files
    session.PutFiles(@"d:\toupload\*", "/home/user/").Check();
}
' Setup session options
Dim sessionOptions As New SessionOptions
With sessionOptions
    .Protocol = Protocol.Sftp
    .HostName = "example.com"
    .UserName = "user"
    .Password = "mypassword"
    .SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
End With

Using session As New Session
    ' Connect
    session.Open(sessionOptions)

    ' Upload files
    session.PutFiles("d:\toupload\*", "/home/user/").Check()
End Using