使用 WinSCP .NET 程序集上传后删除文件
Delete files after upload with WinSCP .NET assembly
我的脚本很简单
// 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);
}
}
}
当我下载时,远程主机上的文件将被传输并在远程主机上删除。但是,当我从本地文件夹上传时,上传可以正常进行,但不会删除本地文件夹中的文件。我没有错误。
我从我的用户开始。我是这个文件的所有者,我可以手动删除它们。
另外,当我在 session.RemoveFiles
上设置断点时,将显示具有正确本地路径的正确文件。
也许你知道我的失败之处。
Session.RemoveFiles
deletes remote files only. It cannot delete local files. For deleting local files, use the standard .NET File.Delete
.
虽然更容易(也更好)是将 true
传递给 Session.GetFiles
/Session.PutFiles
的 remove
(第 3 个)参数。
即使是下载,它也比您当前的代码更好,因为它会删除所有成功下载的文件。虽然您当前的代码不会删除任何文件,但如果只有部分文件下载成功。
此外,您使用的是默认值 TransferOptions
,因此该代码是多余的。
最后,您可以将代码简化为:
using (Session session = new Session())
{
session.Open(sessionOptions);
if (modus == "download")
{
session.GetFiles(remoteDirectoryDownload, localDirectoryDownload, true).Check();
}
else
{
session.PutFiles(localDirectoryUpload, remoteDirectoryUpload, true).Check();
}
}
我的脚本很简单
// 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);
}
}
}
当我下载时,远程主机上的文件将被传输并在远程主机上删除。但是,当我从本地文件夹上传时,上传可以正常进行,但不会删除本地文件夹中的文件。我没有错误。
我从我的用户开始。我是这个文件的所有者,我可以手动删除它们。
另外,当我在 session.RemoveFiles
上设置断点时,将显示具有正确本地路径的正确文件。
也许你知道我的失败之处。
Session.RemoveFiles
deletes remote files only. It cannot delete local files. For deleting local files, use the standard .NET File.Delete
.
虽然更容易(也更好)是将 true
传递给 Session.GetFiles
/Session.PutFiles
的 remove
(第 3 个)参数。
即使是下载,它也比您当前的代码更好,因为它会删除所有成功下载的文件。虽然您当前的代码不会删除任何文件,但如果只有部分文件下载成功。
此外,您使用的是默认值 TransferOptions
,因此该代码是多余的。
最后,您可以将代码简化为:
using (Session session = new Session())
{
session.Open(sessionOptions);
if (modus == "download")
{
session.GetFiles(remoteDirectoryDownload, localDirectoryDownload, true).Check();
}
else
{
session.PutFiles(localDirectoryUpload, remoteDirectoryUpload, true).Check();
}
}