(550)使用FTP下载文件时文件不可用

时间:2017-08-30 01:27:02

标签: php .net vb.net

也许我已经在最后一个问题中说过了......

我有一个PHP脚本,它不断使用cronjobs更新ZIP文件。

虽然我有一个在后台运行的VB.NET应用程序,它每900毫秒执行一次。这个VB.NET应用程序使用FTP下载ZIP文件。

每次更新ZIP文件时......我得到"(550)文件不可用" VB.NET应用程序出错,但点击"继续"新文件已成功下载。

我到处搜索忽略这个错误并阻止它显示但没有任何好处。

那该怎么办?修复是在PHP代码中?还是VB.NET代码?

我已经有了一个解决方案,它将VB.NET应用程序Timer增加到5000毫秒(5秒)而不是900毫秒。但我确实看到900毫秒的时间是合适的,因为我希望快速下载文件。

编辑:增加计时器失败,因为计时器仍然可能正在运行并且cronjob在同一时间执行。

如果有任何解决方案,那真的很棒!否则,我认为唯一的解决方案是增加VB.NET应用程序Timer,对吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

是唯一的解决方案是更改定时器间隔。

在Form Load事件上写这个(Timer1是一个例子,但你写了你的计时器名称):

Timer1.Interval = 5000

但是,如果您正在使用C#,您可以检查FTP服务器上是否存在该文件.....如果该文件不存在,则计时器将不会执行!但你使用的是vb dot net

答案 1 :(得分:1)

争用共享资源的任何两个周期性任务最终都会遇到冲突。处理它的一般策略是:

  • 在成功之前重试失败的操作

  • 锁定资源,使得呼叫者被阻止,直到锁被释放为止

在您的情况下,重试似乎更容易,因为您可以在客户端(您的VB应用程序)中实现它。锁定必须在服务器上实现,还需要配置或自定义FTP服务器本身,而不仅仅是PHP脚本。

增加计时器只会降低碰撞的风险。它并没有消除它。

答案 2 :(得分:0)

您可以将代码放入Try ... Catch中,然后忽略该错误。

答案 3 :(得分:0)

好的,我解决了!方法如下:

在PHP文件中,我添加了这个变量行:

$RandomFileName = rand(0, 9).rand(0, 9).rand(0, 9).rand(0, 9).rand(0, 9).rand(0, 9).rand(0, 9).rand(0, 9).rand(0, 9).rand(0, 9).".zip";

我创建了一个空的txt文件并将其命名为#34; lastfilename.txt"我将它的权限设置为777。

之后我在PHP文件中添加了它:

// Clear the content of the "lastfilename.html" file.
file_put_contents("./lastfilename.txt", "");
// Add the new content to the "lastfilename.html" file.
file_put_contents("./lastfilename.txt", $RandomFileName);

现在我在PHP文件中添加了它:

$GetLastUpdatedFileName = file_get_contents("./lastfilename.txt");
Zip('../MyFolder', '../zipfiles/'.$GetLastUpdatedFileName);

请注意我的PHP脚本ZIPs" MyFolder"目录并将ZIP文件放入" zipfiles" 。目录

我使用this answer作为Zip函数。

现在在VB.NET应用程序中:我创建了一个Label并将其命名为#34; LastupdatedFilename" (我将Label颜色设置为Form背景的相同颜色以隐藏它)

我在VB.NET应用程序Timer tick上添加了这段代码:

Dim address As String = "http://tld.com/link/to/textfile.txt"
Dim client As WebClient = New WebClient()
Dim reader As StreamReader = New StreamReader(client.OpenRead(address))
LastupdatedFilename.Text = reader.ReadToEnd

现在VB.NET应用程序按如下方式下载文件(这也在Timer tick代码中添加):

FtpDownloadFile("htdocs/zipfiles/" + LastupdatedFilename.Text)

所以是的,它浪费了磁盘空间,但它适合我。

摘要 :我使用新名称创建新的ZIP文件,而不是替换旧的。

感谢所有试图解决我问题的人: - )