请大家指点一下FTP问题

ArmStronger 2011-02-16 01:11:33
我在对服务器上指定文件夹下的一个txt文件进行下载时,只有第一次下载的内容正确,后面的虽然没有报错,整个下载流程也通过,但是下载的内容没有更新,想了很久也不明白,麻烦各位指点一下。
...全文
125 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy95800 2011-02-16
  • 打赏
  • 举报
回复
我觉得你应该试试 把服务器和本地的文件同时删除 看看是不是还能下载到 你可能撞鬼了
Tiger_Zhao 2011-02-16
  • 打赏
  • 举报
回复
MMSDN 中的参数的位置有问题,看
http://support.microsoft.com/kb/157607/zh-cn
ArmStronger 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 andy95800 的回复:]
哈哈 我终于知道这哥们为何调戏不成功了
在ide环境里使用的App.Path可能并不是你想象中的路径 这个路径在调试中可能是vb.exe所在路径 还更有可能是工程所在的路径,跟你启动vb6的方式有关系
直接打开工程文件的话App.Path=工程所在的路径
先启动vb6再打开工程文件时App.Path=vb.exe所在的路径
相信你是找错文件位置了,debug一下App.Path就行了 ……
[/Quote]
查过了,不存在这个问题,谢谢
ArmStronger 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 tiger_zhao 的回复:]
MSDN:dwInternetFlags
...
INTERNET_FLAG_RELOAD
Forces a download of the requested file, object, or directory listing from the origin server, not from the cache.
说得很清楚了。
[/Quote]
我的函数也是这样写的,但是还是更新不了
Public Function GetFile&(ByVal HostFile$, _
ByVal ToLocalFile$, _
Optional tt As FileTransferType = fttUnknown)
'Get the specified file and move to the desired location using
'[optional] specified file transfer type

On Local Error GoTo Handler
Dim ReturnVal&
Dim remotefile$
Dim RemoteDir$
Dim LocalFile$
Dim pos&
Dim ErrMsg$

GetFile& = FAILURE&

'If not connected, raise an error
If m_hSession& = NO_CONNECTION& Then
Err.Raise ERR_NOT_CONNECTED_TO_SITE, "clsFTP:GetFile", ERR_NO_CONNECTION$
End If

'Get the file
ReturnVal& = FtpGetFile(m_hSession&, HostFile$, _
ToLocalFile$, False, INTERNET_FLAG_RELOAD, tt, 0)

If ReturnVal& = FAILURE& Then
ErrMsg$ = Replace(ERR_DOWNLOAD$, "%s", HostFile$)
Err.Raise ERR_CANNOT_GET_FILE, "clsFTP:GetFile", ErrMsg$
End If

GetFile& = SUCCESS&

ExitProc:
Exit Function

Handler:
GetFile& = Err.Number
Resume ExitProc

End Function
Tiger_Zhao 2011-02-16
  • 打赏
  • 举报
回复
[Quote=MSDN:]dwInternetFlags
...
INTERNET_FLAG_RELOAD
Forces a download of the requested file, object, or directory listing from the origin server, not from the cache. [/Quote]
说得很清楚了。
andy95800 2011-02-16
  • 打赏
  • 举报
回复
哈哈 我终于知道这哥们为何调戏不成功了
在ide环境里使用的App.Path可能并不是你想象中的路径 这个路径在调试中可能是vb.exe所在路径 还更有可能是工程所在的路径,跟你启动vb6的方式有关系
直接打开工程文件的话App.Path=工程所在的路径
先启动vb6再打开工程文件时App.Path=vb.exe所在的路径
相信你是找错文件位置了,debug一下App.Path就行了 去显示出来的目录下找下载到的文件才是新下载的文件
ArmStronger 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 andy95800 的回复:]
每次下载前删除对应文件后再下载 看看新下载的文件内容跟服务器上的文件内容是否一致?如果下载后的文件内容不一致那才是真正的有问题
[/Quote]
现在就是这个问题,第一次可以,后面的下载内容没有更新
ArmStronger 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 andy95800 的回复:]
服务器上的文件是不是忘了更新了 每次下载前都更新了?代码看不出有问题 而且你也说了 肯定是删除后能新下载到新文件,那就不会是这段代码的问题
[/Quote]
服务器上的文件确定是更新过的,就是下载不知道为什么
ArmStronger 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tiger_zhao 的回复:]
那就找这个类的问题,为什么没有刷新,估计要每次下载前先清除缓存。
[/Quote]
缓存问题不是很清楚,下载文件用的是下面这个API函数:
Private Declare Function FtpGetFile Lib "wininet.dll" _
Alias "FtpGetFileA" _
(ByVal hOutboundSession&, _
ByVal lpszRemoteFile$, _
ByVal lpszNewFile$, _
ByVal fFailIfExists As Boolean, _
ByVal dwFlagsAndAttributes&, _
ByVal dwFlags&, _
ByVal dwContext&) As Boolean
andy95800 2011-02-16
  • 打赏
  • 举报
回复
每次下载前删除对应文件后再下载 看看新下载的文件内容跟服务器上的文件内容是否一致?如果下载后的文件内容不一致那才是真正的有问题
andy95800 2011-02-16
  • 打赏
  • 举报
回复
ftp下载跟缓存无关吧 没听说ftp可以查缓存的
andy95800 2011-02-16
  • 打赏
  • 举报
回复
服务器上的文件是不是忘了更新了 每次下载前都更新了?代码看不出有问题 而且你也说了 肯定是删除后能新下载到新文件,那就不会是这段代码的问题
Tiger_Zhao 2011-02-16
  • 打赏
  • 举报
回复
那就找这个类的问题,为什么没有刷新,估计要每次下载前先清除缓存。
ArmStronger 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tiger_zhao 的回复:]
FTP 是什么东西?问它为什么。
[/Quote]
FTP是一个类,封装了Wininet.dll API上传下载等函数
Tiger_Zhao 2011-02-16
  • 打赏
  • 举报
回复
FTP 是什么东西?问它为什么。
ArmStronger 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 veron_04 的回复:]
引用 4 楼 andy95800 的回复:
不断调戏调戏即可,程序员的乐趣即在于斯

....
[/Quote]

Veron_04有什么意见,说下呗
贝隆 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 andy95800 的回复:]
不断调戏调戏即可,程序员的乐趣即在于斯
[/Quote]
....
ArmStronger 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 andy95800 的回复:]
不断调戏调戏即可,程序员的乐趣即在于斯
[/Quote]
调试很多次了,文件也肯定是新下载的,就是内容不变
andy95800 2011-02-16
  • 打赏
  • 举报
回复
不断调戏调戏即可,程序员的乐趣即在于斯
ArmStronger 2011-02-16
  • 打赏
  • 举报
回复
忘记格式了!

Private Sub btn_Down_Click()
Dim fileID As Integer
Dim str As String

If FTP.IsConnected = True Then
If FTP.FindFirstFile("up.txt") = 1 Then'服务器上存在此文件
If Dir(App.Path & "\DownLoad.txt") <> "" Then
Kill App.Path & "\DownLoad.txt"
End If

Call FTP.GetFile("up.txt", App.Path & "\DownLoad.txt")'下载

fileID = FreeFile(1)
Open App.Path & "\DownLoad.txt" For Input As #fileID
Line Input #fileID, str
Me.txt_DownLoad.Text = str
Close #fileID

End If
Else
MsgBox Err.Descriptio
End If
End Sub
加载更多回复(2)

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧