如何判断文件是否已完成FTP?
我们有一个C#Windows服务轮询一个等待FTP文件发布的文件夹。为了避免在文件仍被写入时使用该文件,我们首先尝试锁定文件,但是,似乎有在创建FTP文件之后但在写入文件之前我们获取文件锁定的情况,因此我们最终打开一个空文件。
有没有可靠的判断FTP是否完整?
如何使用文件夹观察器对内容编制索引,如果文件大小在5分钟内没有变化,则可以非常保证上传已完成。
超时可能与FTP服务器的超时有关。
https://www.codeproject.com/KB/files/MonitorFolderActivity.aspx
您可以在上传之前更改文件名,然后在完成后重命名。 这样看起来好像直到完成才会存在。
我见过的一种做法是你传输两个文件,一个是实际文件,然后是另一个我们可以调用.done文件的文件。 理想的是,只要您看到.done文件就知道第一个文件应该完成。
其他选项包括观察文件进行修改并等待一段时间没有修改。 当然这不是完全证据。
编辑
Kyle明确指出,在.done文件中添加校验和和/或指示第一个文件的大小是对边缘情况的良好保护。
我一直是.filepart协议的忠实粉丝,所以无论你使用什么传输协议(ftp,ssh,rsync等),你都有相同的理解。
这不是您问题的直接答案,但是从长远来看,更通用的解决方案可能更适合您,而不是搜索仅支持ftp的解决方案。
(.filepart:将文件重命名为test.txt到test.txt.filepart,然后在完成后,将其命名为test.txt)
我一直使用校验和文件。 因此,您发送一个校验和文件,表示文件大小和校验和。 当第一个文件中的校验和与文件系统上的实际校验和匹配时,您将知道文件已正确上载。
我过去使用的方法是这里的一些其他回复的混合。 即使用与预期的扩展名不同的扩展名(例如FILENAME.part)来FTP文件,然后使用适当的扩展名将其重命名为上传的最后一步。
在服务器上,使用FileSystemWatcher查找具有正确扩展名的新文件。 FSW在重命名之前不会看到该文件,并且重命名操作是primefaces操作,因此文件将在重命名时完成并可用。
重命名或移动文件当然取决于您可以控制上传过程。
如果您无法控制文件的上传方式,那么您将无法使用FSW知道正在上传的文件,然后监控文件的大小 – 当它长时间保持不变时,您可以假设它完整了。
您可能希望查看System.IO.FileSystemWatcher而不是轮询。
上述就是C#学习教程:如何判断文件是否已完成FTP?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/983556.html