Foxtable(狐表)用户栏目专家坐堂 → FTP下载文件


  共有183人关注过本帖树形打印复制链接

主题:FTP下载文件

帅哥哟,离线,有人找我吗?
mxl810823
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:372 积分:3134 威望:0 精华:0 注册:2018/2/27 17:32:00
FTP下载文件  发帖心情 Post By:2024/12/9 16:31:00 [只看该作者]

        运行如下程序时,服务器连接都没有报错,但时同一个文件有时能正常,有时报加载失败,有时当报加载失败时打开文件夹却又是已经下载了文件。怎么回事呢?
If ftpd.Connect = True Then
    If ftpd.Download (ylj, mlj) = True Then
        Dim Proc As New Process 
        Proc.File = mlj
        Proc.Start()
    Else
        MessageBox.Show ("文件加载失败") 
    End If
Else
    MessageBox.Show ("服务器无法连接") 
End If

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/12/9 16:39:00 [只看该作者]

文件有多大?会不会文件之前已经下载,并且处于打开状态?下载后是保存在哪的,本机硬盘,还是共享目录?

 回到顶部
帅哥哟,离线,有人找我吗?
mxl810823
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:372 积分:3134 威望:0 精华:0 注册:2018/2/27 17:32:00
  发帖心情 Post By:2024/12/9 17:02:00 [只看该作者]

        ylj = r("文件路径")
        mlj = ProjectPath & "RemoteFiles\" & r("文件名称")
文件保存在本机硬盘项目文件夹里,文件大小几十K的,几M的,都有,
文件之前已经下载,并且处于打开状态,这个我有注意到的,我打开了的我关掉才试的

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/12/9 17:10:00 [只看该作者]

多测试,跟踪调试看看,找找有没有什么规律

If ftpd.Connect = True Then
MessageBox.Show (FileSys.FileExists(mlj)
    If ftpd.Download (ylj, mlj) = True Then
        Dim Proc As New Process 
        Proc.File = mlj
        Proc.Start()
    Else
        MessageBox.Show ("文件加载失败," & FileSys.FileExists(mlj)
    End If
Else

 回到顶部
帅哥哟,离线,有人找我吗?
mxl810823
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:372 积分:3134 威望:0 精华:0 注册:2018/2/27 17:32:00
  发帖心情 Post By:2024/12/9 17:29:00 [只看该作者]

        ylj = r("文件路径").replace(vblf, "").replace(vbcr, "").replace(" ", "")
        mlj = ProjectPath & "RemoteFiles\" & r("文件名称").replace(vblf, "").replace(vbcr, "").replace(" ", "")
        If filesys.FileExists (mlj) Then
            Dim Proc As New Process 
            Proc.File = mlj
            Proc.Start()
        Else
            If ftpd.Download (ylj, mlj) = True Then
                Dim Proc As New Process 
                Proc.File = mlj
                Proc.Start()
            Else
                MessageBox.Show ("文件加载失败") 
            End If
        End if

我把代码改成这样,现在第一次运行实际是下载了文件的,但是报加载失败,第二次运行就可以直接打开,怎么样才可以第一次运行下载同时打开?不用再运行二次

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/12/9 17:31:00 [只看该作者]

试试

If filesys.FileExists (mlj) Then
    Dim Proc As New Process 
    Proc.File = mlj
    Proc.Start()
Else
    If ftpd.Download (ylj, mlj) = True Then
        Dim Proc As New Process 
        Proc.File = mlj
        Proc.Start()
    Else
        If filesys.FileExists (mlj) Then
            Dim Proc As New Process 
            Proc.File = mlj
            Proc.Start()
        Else
            MessageBox.Show ("文件加载失败") 
        End If
    End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
mxl810823
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:372 积分:3134 威望:0 精华:0 注册:2018/2/27 17:32:00
  发帖心情 Post By:2024/12/9 17:35:00 [只看该作者]

是不是要延迟一下,再调用程序打开?但是我试的文件才几十K,也不大,要怎么搞?

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/12/9 17:38:00 [只看该作者]

    Else
Threading.Thread.Sleep(1000) '等待1秒
Application.DoEvents
        If filesys.FileExists (mlj) Then
            Dim Proc As New Process 
            Proc.File = mlj
            Proc.Start()
        Else
            MessageBox.Show ("文件加载失败") 
        End If
    End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
mxl810823
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:372 积分:3134 威望:0 精华:0 注册:2018/2/27 17:32:00
  发帖心情 Post By:2024/12/9 17:38:00 [只看该作者]

现在多加一层IF, 目前可以一次打开,再多试试,有问题再问,谢谢了

 回到顶部