【发布时间】:2017-10-04 21:19:27
【问题描述】:
我正在为 SFTP 使用 SSH.NET 库。我需要将文件上传到同一服务器上的两个文件夹中,但是文件会很大,所以我不想通过网络发送两次。
一旦数据在服务器上,是否有从一个文件夹复制到下一个文件夹的命令?或者也许可以同时上传,而不必通过网络发送相同数据的两个副本?
【问题讨论】:
我正在为 SFTP 使用 SSH.NET 库。我需要将文件上传到同一服务器上的两个文件夹中,但是文件会很大,所以我不想通过网络发送两次。
一旦数据在服务器上,是否有从一个文件夹复制到下一个文件夹的命令?或者也许可以同时上传,而不必通过网络发送相同数据的两个副本?
【问题讨论】:
您可能无法直接复制该文件。具体原因见:
In an SFTP session is it possible to copy one remote file to another location on same remote SFTP server?
如果你有 shell 访问权限,你当然可以使用 shell 会话执行cp 命令。
见How to run commands on SSH server in C#?
通过 SFTP 复制远程文件的唯一可靠工作方法是下载并重新上传文件。
最简单的方法(不创建临时本地文件)是:
SftpClient client = new SftpClient("example.com", "username", "password");
client.Connect();
using (Stream sourceStream = client.OpenRead("/source/path/file.dat"))
using (Stream destStream = client.Create("/dest/path/file.dat"))
{
sourceStream.CopyTo(destStream);
}
但我知道这不是你想要的。
【讨论】:
您可以使用 Powershell FileSystemWatcher 之类的东西来监控其中一个文件夹中的更改。然后,一旦有一个新文件添加到该文件夹中,您就可以触发一个操作(例如 Robocopy)并将文件复制到另一个文件夹中。
【讨论】: