使用 SSH.NET 从 SFTP 服务器下载一个特定文件
Download one specific file from SFTP server using SSH.NET
我正在尝试使用 SSH.NET 从服务器仅下载一个文件。
到目前为止我有这个:
using Renci.SshNet;
using Renci.SshNet.Common;
...
public void DownloadFile(string str_target_dir)
{
client.Connect();
if (client.IsConnected)
{
var files = client.ListDirectory(@"/home/xymon/data/hist");
foreach (SftpFile file in files)
{
if (file.FullName== @"/home/xymon/data/hist/allevents")
{
using (Stream fileStream = File.OpenWrite(Path.Combine(str_target_dir, file.Name)))
{
client.DownloadFile(file.FullName, fileStream);
}
}
}
}
else
{
throw new SshConnectionException(String.Format("Can not connect to {0}@{1}",username,host));
}
}
我的问题是我不知道如何用字符串 @"/home/xymon/data/hist/allevents"
.
构造 SftpFile
这就是为什么我在条件中使用 foreach
循环的原因。
感谢您的帮助。
您不需要 SftpFile
来调用 SftpClient.DownloadFile
。该方法仅采用普通路径:
/// <summary>
/// Downloads remote file specified by the path into the stream.
/// </summary>
public void DownloadFile(string path, Stream output, Action<ulong> downloadCallback = null)
像这样使用它:
using (Stream fileStream = File.OpenWrite(Path.Combine(str_target_dir, "allevents")))
{
client.DownloadFile("/home/xymon/data/hist/allevents", fileStream);
}
如果你真的需要 SftpFile
,你可以使用 SftpClient.Get
方法:
/// <summary>
/// Gets reference to remote file or directory.
/// </summary>
public SftpFile Get(string path)
但你没有。
如果你想检查文件是否存在,你可以做类似的事情...
public void DownloadFile(string str_target_dir)
{
using (var client = new SftpClient(host, user, pass))
{
client.Connect();
var file = client.ListDirectory(_pacRemoteDirectory).FirstOrDefault(f => f.Name == "Name");
if (file != null)
{
using (Stream fileStream = File.OpenWrite(Path.Combine(str_target_dir, file.Name)))
{
client.DownloadFile(file.FullName, fileStream);
}
}
else
{
//...
}
}
}
我正在尝试使用 SSH.NET 从服务器仅下载一个文件。
到目前为止我有这个:
using Renci.SshNet;
using Renci.SshNet.Common;
...
public void DownloadFile(string str_target_dir)
{
client.Connect();
if (client.IsConnected)
{
var files = client.ListDirectory(@"/home/xymon/data/hist");
foreach (SftpFile file in files)
{
if (file.FullName== @"/home/xymon/data/hist/allevents")
{
using (Stream fileStream = File.OpenWrite(Path.Combine(str_target_dir, file.Name)))
{
client.DownloadFile(file.FullName, fileStream);
}
}
}
}
else
{
throw new SshConnectionException(String.Format("Can not connect to {0}@{1}",username,host));
}
}
我的问题是我不知道如何用字符串 @"/home/xymon/data/hist/allevents"
.
SftpFile
这就是为什么我在条件中使用 foreach
循环的原因。
感谢您的帮助。
您不需要 SftpFile
来调用 SftpClient.DownloadFile
。该方法仅采用普通路径:
/// <summary>
/// Downloads remote file specified by the path into the stream.
/// </summary>
public void DownloadFile(string path, Stream output, Action<ulong> downloadCallback = null)
像这样使用它:
using (Stream fileStream = File.OpenWrite(Path.Combine(str_target_dir, "allevents")))
{
client.DownloadFile("/home/xymon/data/hist/allevents", fileStream);
}
如果你真的需要 SftpFile
,你可以使用 SftpClient.Get
方法:
/// <summary>
/// Gets reference to remote file or directory.
/// </summary>
public SftpFile Get(string path)
但你没有。
如果你想检查文件是否存在,你可以做类似的事情...
public void DownloadFile(string str_target_dir)
{
using (var client = new SftpClient(host, user, pass))
{
client.Connect();
var file = client.ListDirectory(_pacRemoteDirectory).FirstOrDefault(f => f.Name == "Name");
if (file != null)
{
using (Stream fileStream = File.OpenWrite(Path.Combine(str_target_dir, file.Name)))
{
client.DownloadFile(file.FullName, fileStream);
}
}
else
{
//...
}
}
}