介绍
WinSCP .NET 程序集是Nuget上的安装包,它允许代码连接到远程计算机,并在 SFTP、FTP、WebDAV、S3 和 SCP 会话上操作远程文件
官网信息
地址
https://winscp.net/eng/index.php
.Net示例代码
https://winscp.net/eng/docs/library_examples
SFTP操作文件
上传 PutFiles
public static int WinScpUpload()
{
try
{
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = "192.168.xx.xxx",
PortNumber = 22,// SFTP默认端口22
UserName = "用户名",
Password = "密码",
SshHostKeyFingerprint = "ssh-ed25519 255 ***"// 不知道时可以在下面根据用户名和密码生成,是必须的
};
using (Session session = new Session())
{
// 可以使用该语句生成SshHostKeyFingerprint
//var fingerprint = session.ScanFingerprint(sessionOptions, "SHA-256");
// Connect
session.Open(sessionOptions);
// Upload files
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
// PutFiles参数解释:localPath,remotePath,remove,TransferOptions
// remove:bool,成功后是否删除本地文件,默认false
var transferResult = session.PutFiles(@"d: est*", "/home/test/", true, transferOptions);
// Throw on any error
transferResult.Check();
// Print results
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
}
}
return 0;
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e);
return 1;
}
}
下载 GetFiles
下载文件与上传文件代码基本一致,对应的PutFiles改为GetFiles即可
FTP操作文件
上传 PutFiles
public static int WinScpUpload()
{
try
{
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "192.168.xx.xxx",
PortNumber = 21,// FTP默认端口21
UserName = "用户名",
Password = "密码"
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Upload files
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
// PutFiles参数解释:localPath,remotePath,remove,TransferOptions
// remove:bool,成功后是否删除本地文件,默认false
var transferResult = session.PutFiles(@"d: est*", "/home/test/", true, transferOptions);
// Throw on any error
transferResult.Check();
// Print results
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
}
}
return 0;
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e);
return 1;
}
}
下载 GetFiles
下载文件与上传文件代码基本一致,对应的PutFiles改为GetFiles即可
// GetFiles参数解释:remotePath,localPath,remove,TransferOptions
// remove:bool,成功后是否删除远程文件,默认false
var transferResult = session.GetFiles("/home/test.yao/test.txt", @"d:download", true, transferOptions);
总结
- SFTP:默认端口22,协议为SFTP,需要有SshHostKeyFingerprint
- FTP:默认端口21,协议为FTP,不需要SshHostKeyFingerprint