C# 带有.NET3.5的SFTP
我需要连接到SFTP服务器以使用C#/.NET 3.5下载和上载文件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支持。有商业解决方案: …免费: 我个人
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