【发布时间】:2015-03-11 17:26:19
【问题描述】:
我们正在使用 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 - Account\UserID [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 - Account\UserID [3346220]dele /in/YYYXXX.xml - 250 - - - 22
- 2015-03-05 22:31:28 - 帐户\用户 ID [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
此问题的发生也没有规律,即不基于文件大小、日期等。
我们已经在脚本中包含了确认关闭选项,因此应根据需要进行恢复。我们使用的是 WinSCP 5.0.5 版(Build 1782)。
还有什么我们需要更改/配置的吗?让我知道您需要我提供哪些其他信息。
【问题讨论】:
-
你能包含显示问题的 WinSCP 日志吗?
-
Martin,我已经删除了我在 ServerFault 中发布的主题。我们没有启用 WinSCP 日志记录,所以我没有。只有错误消息可用。
-
你不能复制这个?
-
No Martin,我们无法重现此错误。
-
所以请确保您启用了日志记录,这样您就可以在问题再次出现时使用。