以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  FTP下载文件  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=194434)

--  作者:mxl810823
--  发布时间:2024/12/9 16:31:00
--  FTP下载文件
        运行如下程序时,服务器连接都没有报错,但时同一个文件有时能正常,有时报加载失败,有时当报加载失败时打开文件夹却又是已经下载了文件。怎么回事呢?
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

--  作者:有点蓝
--  发布时间:2024/12/9 16:39:00
--  
文件有多大?会不会文件之前已经下载,并且处于打开状态?下载后是保存在哪的,本机硬盘,还是共享目录?
--  作者:mxl810823
--  发布时间:2024/12/9 17:02:00
--  
        ylj = r("文件路径")
        mlj = ProjectPath & "RemoteFiles\\" & r("文件名称")
文件保存在本机硬盘项目文件夹里,文件大小几十K的,几M的,都有,
文件之前已经下载,并且处于打开状态,这个我有注意到的,我打开了的我关掉才试的

--  作者:有点蓝
--  发布时间: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
--  发布时间: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

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

--  作者:有点蓝
--  发布时间: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
--  发布时间:2024/12/9 17:35:00
--  
是不是要延迟一下,再调用程序打开?但是我试的文件才几十K,也不大,要怎么搞?
--  作者:有点蓝
--  发布时间: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
--  发布时间:2024/12/9 17:38:00
--  
现在多加一层IF, 目前可以一次打开,再多试试,有问题再问,谢谢了