我们有一个服务轮询一个文件夹,等待一个C#格式的文件被张贴进去。为了避免在文件仍被写入时使用它,我们首先尝试获得文件上的锁,但是,似乎有一些情况下,我们在FTP文件创建之后但在文件被写入之前获得了文件上的锁,所以我们最终打开了一个空文件。
有没有可靠的方法来判断FTP是否完成?
发布于 2009-02-05 22:01:23
使用文件夹观察器来索引内容,如果文件大小在5分钟内没有变化,你可以很好地保证上传已经完成了。
超时时间可能与FTP服务器的超时时间有关。
http://www.codeproject.com/KB/files/MonitorFolderActivity.aspx
发布于 2009-02-05 21:56:20
你可以在上传前更改文件名,然后在上传完成后重命名。这样,在完成之前,它看起来就像不存在一样。
发布于 2009-02-05 21:59:10
我见过的一种做法是传输两个文件,一个是实际的文件,第二个我们称之为.done文件。理想的情况是,只要您看到.done文件,就知道应该完成第一个文件。
其他选项包括查看文件是否有修改,并等待一段特定的无修改时间。当然,这并不是完全的证据。
编辑
Kyle提出了一个很好的观点,即向.done文件添加校验和和/或指示第一个文件的大小是防止边缘情况的良好保护。
https://stackoverflow.com/questions/518109
复制相似问题