我的脚本很简单
public void transferfiles(String modus)
{
try
{
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = conHostName,
UserName = conUserName,
Password = conPasswort,
SshHostKeyFingerprint = conSshHostKeyFingerprint
};
using (Session session = new Session())
{
session.Open(sessionOptions);
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
TransferOperationResult transferResult;
if(modus == "download")
{
transferResult = session.GetFiles(remoteDirectoryDownload, localDirectoryDownload, false, transferOptions);
}
else
{
transferResult = session.PutFiles(localDirectoryUpload, remoteDirectoryUpload, false, transferOptions);
}
transferResult.Check();
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
try
{
Console.WriteLine("Delete File: {0}", transfer.FileName);
session.RemoveFiles(transfer.FileName);
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e);
}
}
}
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e);
}
}
}
当我执行下载时,来自远程主机的文件将在远程主机上传输并删除。但是,当我从本地文件夹进行上传时,可以进行上传,但是不会删除本地文件夹中的文件。我没有错。
我从我的用户开始。我是此文件的所有者,可以手动将其删除。
此外,当我在“ session.RemoveFiles”上设置断点时,将显示具有正确本地路径的正确文件。
也许您对我有一个想法,我的失败在哪里。
Session.RemoveFiles
仅删除remote个文件。它无法删除local文件。要删除local文件,请使用标准的.NET Session.RemoveFiles
。
尽管更容易(更好)是将File.Delete
传递给File.Delete
/ true
的remove
(第3个)参数。
即使对于下载,它也比您当前的代码更好,因为它会删除所有成功下载的文件。尽管您的当前代码不会删除任何文件,但是如果仅部分文件被成功下载。
此外,您正在使用默认的Session.GetFiles
,因此该代码是多余的。
最后,您可以将代码简化为:
Session.GetFiles