WinSCP 跳过运行过程中删除的文件
WinSCP skip file deleted during operation
我在 MS Access 中有一个按钮,可以创建一个包含一些图像、PDF 和一个 Access .mdb 文件的文件夹,然后打开 WinSCP 以 运行 命令将文件夹上传到 FTP 服务器.
我遇到的一个问题是,由于 "missing .ldb file",上传有时会失败。基本上发生的事情是,当创建 .mdb 时,Access 会临时创建它的锁定 .ldb 文件,有时 .ldb 文件直到 WinSCP 启动 运行ning 后才会消失。 WinSCP 然后遍历所有上传文件,到达 .ldb,但由于它不再存在而失败。
起初我认为排除 .ldb 文件会起作用,但它不起作用。
所以现在我认为跳过不存在的文件是最简单的解决方案。
这可能吗?
(也许甚至在脚本开始时延迟作为另一种解决方案?)
要上传的代码:
Dim strSFTPDir As String
strSFTPDir = "C:\Program Files (x86)\WinSCP\"
Dim UploadsDir As String
UploadsDir = DLookup("PathToPics", "Admin") & "\Uploads\*"
Call Shell(strSFTPDir & "winscp.com /log=""C:\-TabletSoftware-\TabletBE\upload.log"" /command ""open ftp://username:password@ip/"" ""put -filemask=|*.ldb " & UploadsDir & " "" ""exit"" ", vbNormalFocus)
此外,如果有人知道如何使用包含空格的目录,那将很有帮助。
编辑:好吧,我 认为 我有它的工作,但由于错误最初只是偶尔发生,只有时间会证明一切。
修复程序位于 运行ning WinSCP 之前的 Access 中。这只是一个循环,直到 .ldb 被删除。
Do While (Dir(StnPth & "\To Mail.ldb") <> "")
Loop
您需要使用 WinSCP 5.15,如果您需要它来 handle correctly 文件被 selected 以进行文件传输(*
在 UploadsDir
=]),但被排除掩码 (-filemask=|*.ldb
) 排除,但在 put
启动后,但在 WinSCP 获取该文件之前被删除。
如果您受困于旧版本的 WinSCP,您可以 select 只选择您需要的文件,而不是 select 全部,然后排除一些。
使用起来更方便lcd
command to change working directory to UploadsDir
(without *
), so that you can then only enumerate positive file masks in the put
command。
With multiple masks, you need to use target folder at the end(使用./
上传到当前工作目录)
UploadsDir = DLookup("PathToPics", "Admin") & "\Uploads"
Call Shell(... """lcd " + UploadsDir + """ ""put *.mdb *.other *.yetanother ./"" ""exit"" ", ...)
我在 MS Access 中有一个按钮,可以创建一个包含一些图像、PDF 和一个 Access .mdb 文件的文件夹,然后打开 WinSCP 以 运行 命令将文件夹上传到 FTP 服务器.
我遇到的一个问题是,由于 "missing .ldb file",上传有时会失败。基本上发生的事情是,当创建 .mdb 时,Access 会临时创建它的锁定 .ldb 文件,有时 .ldb 文件直到 WinSCP 启动 运行ning 后才会消失。 WinSCP 然后遍历所有上传文件,到达 .ldb,但由于它不再存在而失败。
起初我认为排除 .ldb 文件会起作用,但它不起作用。
所以现在我认为跳过不存在的文件是最简单的解决方案。
这可能吗?
(也许甚至在脚本开始时延迟作为另一种解决方案?)
要上传的代码:
Dim strSFTPDir As String
strSFTPDir = "C:\Program Files (x86)\WinSCP\"
Dim UploadsDir As String
UploadsDir = DLookup("PathToPics", "Admin") & "\Uploads\*"
Call Shell(strSFTPDir & "winscp.com /log=""C:\-TabletSoftware-\TabletBE\upload.log"" /command ""open ftp://username:password@ip/"" ""put -filemask=|*.ldb " & UploadsDir & " "" ""exit"" ", vbNormalFocus)
此外,如果有人知道如何使用包含空格的目录,那将很有帮助。
编辑:好吧,我 认为 我有它的工作,但由于错误最初只是偶尔发生,只有时间会证明一切。 修复程序位于 运行ning WinSCP 之前的 Access 中。这只是一个循环,直到 .ldb 被删除。
Do While (Dir(StnPth & "\To Mail.ldb") <> "")
Loop
您需要使用 WinSCP 5.15,如果您需要它来 handle correctly 文件被 selected 以进行文件传输(*
在 UploadsDir
=]),但被排除掩码 (-filemask=|*.ldb
) 排除,但在 put
启动后,但在 WinSCP 获取该文件之前被删除。
如果您受困于旧版本的 WinSCP,您可以 select 只选择您需要的文件,而不是 select 全部,然后排除一些。
使用起来更方便lcd
command to change working directory to UploadsDir
(without *
), so that you can then only enumerate positive file masks in the put
command。
With multiple masks, you need to use target folder at the end(使用./
上传到当前工作目录)
UploadsDir = DLookup("PathToPics", "Admin") & "\Uploads"
Call Shell(... """lcd " + UploadsDir + """ ""put *.mdb *.other *.yetanother ./"" ""exit"" ", ...)