检查sftp文件传输是否完成?

问题描述 投票:0回答:3

我们这里有一台 Windows 服务器,有一天我们将通过 sftp 获取文件夹中的一些文本文件。我没有更多信息,但也许这已经足够了。现在我应该编写一个函数将这些文件移动到另一个文件夹中。嗯,这应该不那么难,我想......但现在我意识到我可以在文件完成之前移动文件。所以我正在寻找一些解决方案,但我真的很困惑。

我的解决方案是检查文件及其周围的进程。因为如果文件还没有完成,有一个复制过程,我可以检查这个过程。为了使这变得简单,我只需要尝试锁定文件,如果没有其他进程,那么文件就可以移动了?

using (File.Open("myFile", FileMode.Open, FileAccess.Read, FileShare.None)) 
{ /*rdy!*/ }

但现在我看到人们正在写一些关于校验和测试或测试文件大小的东西,如果文件大小没有改变,那么文件就准备好了。这东西是不是有点复杂?请告诉我我的解决方案也可以工作...我无法使用任何服务器到服务器 sftp 内容来测试它。我只知道如果我将文件复制到另一个文件夹(通过资源管理器),这是有效的。这也可以通过 sftp 传输工作吗?有任何想法吗?谢谢你

c# .net file sftp file-transfer
3个回答
3
投票

文件大小检查很危险 - 如果上传暂停然后恢复怎么办?需要多长时间才能接受当前文件大小作为最终文件大小? => 这不是一个好的解决方案。

我会选择锁定,但是,只有当写入文件的进程也以某种方式打开文件以使其被独占锁定时,这才有效。如果该过程没有做到这一点,您将再次陷入困境。

另一种解决方案是使用临时名称上传文件,例如“.sftptmp”。并让上传者在完成后重命名它。这样您就可以确定文件已上传 - 只需忽略所有以“.sftptmp”结尾的文件。但是,这是假设您实际上可以控制上传文件的过程。


0
投票

另一种选择是让发送者在数据文件之后放置一个控制文件。例如,输入

uploadfile-20220714.txt
,然后输入
uploadfile-20220714.ctl
。控制文件可以包含文件信息,例如数据文件的名称和大小。此选项要求发送者修改其流程,但不需要太多努力。


0
投票

我面临类似的问题并看到这篇文章。如果您能分享您是如何解决的,将会很有帮助

© www.soinside.com 2019 - 2024. All rights reserved.