我们正在使用WinSCP通过调用.net代码中的命令将文件传输到SFTP服务器。另一方面,自动化过程会抓取文件并将其移动到另一个位置。以下是正在使用的.Net代码。
With winscp.StandardInput
.WriteLine("option batch abort")
.WriteLine("option confirm off")
.WriteLine("open sftp://" & username & ":" & password & "@" & remotehost)
.WriteLine("option transfer binary")
.WriteLine("lcd " & localFilePath)
If Not remoteFilePath Is Nothing Then .WriteLine("cd " & remoteFilePath)
If remoteFileName Is Nothing Then .WriteLine("put " & localFileName) Else .WriteLine("put " & localFileName & " """ & remoteFileName & """")
.Close()
End With
在某些情况下,当WinSCP发出PUT命令时,
- 创建部分文件
- 将其重命名为原始名称
- 另一端的进程移动文件
- 然后我们的流程再次创建部分文件,并尝试删除原始名称的文件。
醇>
不确定为什么会发生第4步,因为我们的代码中没有任何逻辑可以再次放置部分文件并删除原始文件。
请从SFTP服务器上查看以下日志。
- 2015-03-05 22:30:59 - 帐户\用户ID [3346178]已创建 /in/YYYXXX.xml.filepart - 226 - 1178853 - 22
- 2015-03-05 22:31:21 - 帐号\用户ID [3346178] rnfr /in/YYYXXX.xml.filepart - 350 - - 22
- 2015-03-05 22:31:21 - 帐户\用户ID [3346178] rnto /in/YYYXXX.xml - 250 - - - 22
- 2015-03-05 22:31:25 - 帐号\用户ID [3346215]已发送 /in/YYYXXX.xml - 226 - 17924096 - 22
- 2015-03-05 22:31:26 - 帐户\用户ID [3346220]删除/in/YYYXXX.xml - 250 - - - 22
- 2015年3月5日 22:31:28 - Account \ UserID [3346209]创建了/in/YYYXXX.xml.filepart - 226 - 1178853 - 22
- 2015-03-05 22:31:28 - 帐户\用户ID [3346209]删除 /in/YYYXXX.xml - 550 - - - 22
醇>
从日志中,原始文件(YYYXXX.xml)已被其他进程删除(参见#5),并给出以下错误。
无法使用SFTP XML文件。错误消息:来自PutSFTP:有一个 传输YYYXXX.xml时出错。删除文件'YYYXXX.xml'时出错。后 可恢复文件上传必须删除现有目标文件。 如果您没有删除文件目标文件的权限,那么 需要禁用可恢复的文件传输。没有相应的文件和目录。 错误代码:2来自服务器的错误消息(en):找不到文件请求 代码:13
此问题的发生也没有模式,即不基于文件大小,日期等。
我们已在脚本中包含选项confirm off,因此应根据需要进行恢复。我们使用的是WinSCP版本5.0.5(Build 1782)。
我们还需要改变/配置吗?让我知道您需要的其他信息。
答案 0 :(得分:2)
您是否尝试过使用可以单独下载的.NET程序集?我已经使用了一段时间,它没有给我任何问题。 WinSCP .NET Library
您可能还想查看此错误报告:Here
ResumeSupport要求将 .filepart 文件写入ftp站点并删除或重命名。如果您没有获得许可,则会收到错误。
修复方法是通过更新WinSCP.ini文件并设置ResumeSupport = 2来关闭恢复支持
有关简历支持here
的更多文档